(function(n, t) {
    function ht(n) {
        return i.isWindow(n) ? n: n.nodeType === 9 ? n.defaultView || n.parentWindow: !1
    }
    function ii(n) {
        if (!ut[n]) {
            var e = r.body,
            t = i("<" + n + ">").appendTo(e),
            u = t.css("display");
            t.remove(),
            (u === "none" || u === "") && (f || (f = r.createElement("iframe"), f.frameBorder = f.width = f.height = 0), e.appendChild(f), a && f.createElement || (a = (f.contentWindow || f.contentDocument).document, a.write((r.compatMode === "CSS1Compat" ? "<!doctype html>": "") + "<html><body>"), a.close()), t = a.createElement(n), a.body.appendChild(t), u = i.css(t, "display"), e.removeChild(f)),
            ut[n] = u
        }
        return ut[n]
    }
    function c(n, t) {
        var r = {};
        return i.each(di.concat.apply([], di.slice(0, t)), 
        function() {
            r[this] = n
        }),
        r
    }
    function uf() {
        w = t
    }
    function at() {
        return setTimeout(uf, 0),
        w = i.now()
    }
    function rf() {
        try {
            return new n.ActiveXObject("Microsoft.XMLHTTP")
        } catch(t) {}
    }
    function er() {
        try {
            return new n.XMLHttpRequest
        } catch(t) {}
    }
    function tf(n, r) {
        n.dataFilter && (r = n.dataFilter(r, n.dataType));
        for (var v = n.dataTypes, s = {},
        l, p = v.length, a, u = v[0], h, y, f, e, o, c = 1; c < p; c++) {
            if (c === 1) for (l in n.converters) typeof l == "string" && (s[l.toLowerCase()] = n.converters[l]);
            if (h = u, u = v[c], u === "*") u = h;
            else if (h !== "*" && h !== u) {
                if (y = h + " " + u, f = s[y] || s["* " + u], !f) {
                    o = t;
                    for (e in s) if (a = e.split(" "), (a[0] === h || a[0] === "*") && (o = s[a[1] + " " + u], o)) {
                        e = s[e],
                        e === !0 ? f = o: o === !0 && (f = e);
                        break
                    }
                } ! f && !o && i.error("No conversion from " + y.replace(" ", " to ")),
                f !== !0 && (r = f ? f(r) : o(e(r)))
            }
        }
        return r
    }
    function nf(n, i, r) {
        var s = n.contents,
        f = n.dataTypes,
        c = n.responseFields,
        o,
        u,
        e,
        h;
        for (u in c) u in r && (i[c[u]] = r[u]);
        while (f[0] === "*") f.shift(),
        o === t && (o = n.mimeType || i.getResponseHeader("content-type"));
        if (o) for (u in s) if (s[u] && s[u].test(o)) {
            f.unshift(u);
            break
        }
        if (f[0] in r) e = f[0];
        else {
            for (u in r) {
                if (!f[0] || n.converters[u + " " + f[0]]) {
                    e = u;
                    break
                }
                h || (h = u)
            }
            e = e || h
        }
        if (e) return e !== f[0] && f.unshift(e),
        r[e]
    }
    function ft(n, t, r, u) {
        if (i.isArray(t)) i.each(t, 
        function(t, f) {
            r || eu.test(n) ? u(n, f) : ft(n + "[" + (typeof f == "object" || i.isArray(f) ? t: "") + "]", f, r, u)
        });
        else if (r || t == null || typeof t != "object") u(n, t);
        else for (var f in t) ft(n + "[" + f + "]", t[f], r, u)
    }
    function bi(n, r) {
        var u,
        f,
        e = i.ajaxSettings.flatOptions || {};
        for (u in r) r[u] !== t && ((e[u] ? n: f || (f = {}))[u] = r[u]);
        f && i.extend(!0, n, f)
    }
    function tt(n, i, r, u, f, e) {
        f = f || i.dataTypes[0],
        e = e || {},
        e[f] = !0;
        for (var s = n[f], h = 0, l = s ? s.length: 0, c = n === it, o; h < l && (c || !o); h++) o = s[h](i, r, u),
        typeof o == "string" && (!c || e[o] ? o = t: (i.dataTypes.unshift(o), o = tt(n, i, r, u, o, e)));
        return (c || !o) && !e["*"] && (o = tt(n, i, r, u, "*", e)),
        o
    }
    function ei(n) {
        return function(t, r) {
            if (typeof t != "string" && (r = t, t = "*"), i.isFunction(r)) for (var o = t.toLowerCase().split(hi), f = 0, h = o.length, u, s, e; f < h; f++) u = o[f],
            e = /^\+/.test(u),
            e && (u = u.substr(1) || "*"),
            s = n[u] = n[u] || [],
            s[e ? "unshift": "push"](r)
        }
    }
    function ci(n, t, r) {
        var u = t === "width" ? n.offsetWidth: n.offsetHeight,
        f = t === "width" ? fu: vr;
        return u > 0 ? (r !== "border" && i.each(f, 
        function() {
            r || (u -= parseFloat(i.css(n, "padding" + this)) || 0),
            r === "margin" ? u += parseFloat(i.css(n, r + this)) || 0: u -= parseFloat(i.css(n, "border" + this + "Width")) || 0
        }), u + "px") : (u = h(n, t, t), (u < 0 || u == null) && (u = n.style[t] || 0), u = parseFloat(u) || 0, r && i.each(f, 
        function() {
            u += parseFloat(i.css(n, "padding" + this)) || 0,
            r !== "padding" && (u += parseFloat(i.css(n, "border" + this + "Width")) || 0),
            r === "margin" && (u += parseFloat(i.css(n, r + this)) || 0)
        }), u + "px")
    }
    function gu(n, t) {
        t.src ? i.ajax({
            url: t.src,
            async: !1,
            dataType: "script"
        }) : i.globalEval((t.text || t.textContent || t.innerHTML || "").replace(af, "/*$0*/")),
        t.parentNode && t.parentNode.removeChild(t)
    }
    function rr(n) {
        var t = (n.nodeName || "").toLowerCase();
        t === "input" ? lr(n) : t !== "script" && typeof n.getElementsByTagName != "undefined" && i.grep(n.getElementsByTagName("input"), lr)
    }
    function lr(n) { (n.type === "checkbox" || n.type === "radio") && (n.defaultChecked = n.checked)
    }
    function k(n) {
        return typeof n.getElementsByTagName != "undefined" ? n.getElementsByTagName("*") : typeof n.querySelectorAll != "undefined" ? n.querySelectorAll("*") : []
    }
    function gi(n, t) {
        var r;
        t.nodeType === 1 && (t.clearAttributes && t.clearAttributes(), t.mergeAttributes && t.mergeAttributes(n), r = t.nodeName.toLowerCase(), r === "object" ? t.outerHTML = n.outerHTML: r !== "input" || n.type !== "checkbox" && n.type !== "radio" ? r === "option" ? t.selected = n.defaultSelected: (r === "input" || r === "textarea") && (t.defaultValue = n.defaultValue) : (n.checked && (t.defaultChecked = t.checked = n.checked), t.value !== n.value && (t.value = n.value)), t.removeAttribute(i.expando))
    }
    function ki(n, t) {
        if (t.nodeType === 1 && !!i.hasData(n)) {
            var r,
            u,
            o,
            s = i._data(n),
            e = i._data(t, s),
            f = s.events;
            if (f) {
                delete e.handle,
                e.events = {};
                for (r in f) for (u = 0, o = f[r].length; u < o; u++) i.event.add(t, r + (f[r][u].namespace ? ".": "") + f[r][u].namespace, f[r][u], f[r][u].data)
            }
            e.data && (e.data = i.extend({},
            e.data))
        }
    }
    function du(n) {
        return i.nodeName(n, "table") ? n.getElementsByTagName("tbody")[0] || n.appendChild(n.ownerDocument.createElement("tbody")) : n
    }
    function tr(n) {
        var i = si.split(" "),
        t = n.createDocumentFragment();
        if (t.createElement) while (i.length) t.createElement(i.pop());
        return t
    }
    function ar(n, t, r) {
        if (t = t || 0, i.isFunction(t)) return i.grep(n, 
        function(n, i) {
            var u = !!t.call(n, i, n);
            return u === r
        });
        if (t.nodeType) return i.grep(n, 
        function(n) {
            return n === t === r
        });
        if (typeof t == "string") {
            var u = i.grep(n, 
            function(n) {
                return n.nodeType === 1
            });
            if (su.test(t)) return i.filter(t, u, !r);
            t = i.filter(t, u)
        }

        return i.grep(n, 
        function(n) {
            return i.inArray(n, t) >= 0 === r
        })
    }
    function vi(n) {
        return ! n || !n.parentNode || n.parentNode.nodeType === 11
    }
    function nt() {
        return ! 0
    }
    function v() {
        return ! 1
    }
    function yi(n, t, r) {
        var u = t + "defer",
        f = t + "queue",
        e = t + "mark",
        o = i._data(n, u);
        o && (r === "queue" || !i._data(n, f)) && (r === "mark" || !i._data(n, e)) && setTimeout(function() { ! i._data(n, f) && !i._data(n, e) && (i.removeData(n, u, !0), o.fire())
        },
        0)
    }
    function ot(n) {
        for (var t in n) if ((t !== "data" || !i.isEmptyObject(n[t])) && t !== "toJSON") return ! 1;
        return ! 0
    }
    function pi(n, r, u) {
        if (u === t && n.nodeType === 1) {
            var f = "data-" + r.replace(ur, "-$1").toLowerCase();
            if (u = n.getAttribute(f), typeof u == "string") {
                try {
                    u = u === "true" ? !0: u === "false" ? !1: u === "null" ? null: i.isNumeric(u) ? parseFloat(u) : ir.test(u) ? i.parseJSON(u) : u
                } catch(e) {}
                i.data(n, r, u)
            } else u = t
        }
        return u
    }
    function ku(n) {
        var i = nr[n] = {},
        t,
        r;
        for (n = n.split(/\s+/), t = 0, r = n.length; t < r; t++) i[n[t]] = !0;
        return i
    }
    var r = n.document,
    bu = n.navigator,
    wu = n.location,
    i = function() {
        function c() {
            if (!i.isReady) {
                try {
                    r.documentElement.doScroll("left")
                } catch(n) {
                    setTimeout(c, 1);
                    return
                }
                i.ready()
            }
        }
        var i = function(n, t) {
            return new i.fn.init(n, t, y)
        },
        d = n.jQuery,
        g = n.$,
        y,
        nt = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
        p = /\S/,
        w = /^\s+/,
        b = /\s+$/,
        st = /\d/,
        vt = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
        k = /^[\],:{}\s]*$/,
        at = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
        lt = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
        ct = /(?:^|:|,)(?:\s*\[)+/g,
        ht = /(webkit)[ \/]([\w.]+)/,
        yt = /(opera)(?:.*version)?[ \/]([\w.]+)/,
        ot = /(msie) ([\w.]+)/,
        et = /(mozilla)(?:.*? rv:([\w.]+))?/,
        ft = /-([a-z]|[0-9])/ig,
        ut = /^-ms-/,
        rt = function(n, t) {
            return (t + "").toUpperCase()
        },
        it = bu.userAgent,
        o,
        e,
        u,
        tt = Object.prototype.toString,
        h = Object.prototype.hasOwnProperty,
        s = Array.prototype.push,
        f = Array.prototype.slice,
        l = String.prototype.trim,
        a = Array.prototype.indexOf,
        v = {};
        return i.fn = i.prototype = {
            constructor: i,
            init: function(n, u, f) {
                var e,
                s,
                o,
                h;
                if (!n) return this;
                if (n.nodeType) return this.context = this[0] = n,
                this.length = 1,
                this;
                if (n === "body" && !u && r.body) return this.context = r,
                this[0] = r.body,
                this.selector = n,
                this.length = 1,
                this;
                if (typeof n == "string") {
                    if (e = n.charAt(0) !== "<" || n.charAt(n.length - 1) !== ">" || n.length < 3 ? nt.exec(n) : [null, n, null], e && (e[1] || !u)) {
                        if (e[1]) return u = u instanceof i ? u[0] : u,
                        h = u ? u.ownerDocument || u: r,
                        o = vt.exec(n),
                        o ? i.isPlainObject(u) ? (n = [r.createElement(o[1])], i.fn.attr.call(n, u, !0)) : n = [h.createElement(o[1])] : (o = i.buildFragment([e[1]], [h]), n = (o.cacheable ? i.clone(o.fragment) : o.fragment).childNodes),
                        i.merge(this, n);
                        if (s = r.getElementById(e[2]), s && s.parentNode) {
                            if (s.id !== e[2]) return f.find(n);
                            this.length = 1,
                            this[0] = s
                        }
                        return this.context = r,
                        this.selector = n,
                        this
                    }
                    return ! u || u.jquery ? (u || f).find(n) : this.constructor(u).find(n)
                }
                return i.isFunction(n) ? f.ready(n) : (n.selector !== t && (this.selector = n.selector, this.context = n.context), i.makeArray(n, this))
            },
            selector: "",
            jquery: "1.7",
            length: 0,
            size: function() {
                return this.length
            },
            toArray: function() {
                return f.call(this, 0)
            },
            get: function(n) {
                return n == null ? this.toArray() : n < 0 ? this[this.length + n] : this[n]
            },
            pushStack: function(n, t, r) {
                var u = this.constructor();
                return i.isArray(n) ? s.apply(u, n) : i.merge(u, n),
                u.prevObject = this,
                u.context = this.context,
                t === "find" ? u.selector = this.selector + (this.selector ? " ": "") + r: t && (u.selector = this.selector + "." + t + "(" + r + ")"),
                u
            },
            each: function(n, t) {
                return i.each(this, n, t)
            },
            ready: function(n) {
                return i.bindReady(),
                e.add(n),
                this
            },
            eq: function(n) {
                return n === -1 ? this.slice(n) : this.slice(n, +n + 1)
            },
            first: function() {
                return this.eq(0)
            },
            last: function() {
                return this.eq( - 1)
            },
            slice: function() {
                return this.pushStack(f.apply(this, arguments), "slice", f.call(arguments).join(","))
            },
            map: function(n) {
                return this.pushStack(i.map(this, 
                function(t, i) {
                    return n.call(t, i, t)
                }))
            },
            end: function() {
                return this.prevObject || this.constructor(null)
            },
            push: s,
            sort: [].sort,
            splice: [].splice
        },
        i.fn.init.prototype = i.fn,
        i.extend = i.fn.extend = function() {
            var o,
            e,
            u,
            r,
            s,
            h,
            n = arguments[0] || {},
            f = 1,
            l = arguments.length,
            c = !1;
            for (typeof n == "boolean" && (c = n, n = arguments[1] || {},
            f = 2), typeof n != "object" && !i.isFunction(n) && (n = {}), l === f && (n = this, --f); f < l; f++) if ((o = arguments[f]) != null) for (e in o)(u = n[e], r = o[e], n !== r) && (c && r && (i.isPlainObject(r) || (s = i.isArray(r))) ? (s ? (s = !1, h = u && i.isArray(u) ? u: []) : h = u && i.isPlainObject(u) ? u: {},
            n[e] = i.extend(c, h, r)) : r !== t && (n[e] = r));
            return n
        },
        i.extend({
            noConflict: function(t) {
                return n.$ === i && (n.$ = g),
                t && n.jQuery === i && (n.jQuery = d),
                i
            },
            isReady: !1,
            readyWait: 1,
            holdReady: function(n) {
                n ? i.readyWait++:i.ready(!0)
            },
            ready: function(n) {
                if (n === !0 && !--i.readyWait || n !== !0 && !i.isReady) {
                    if (!r.body) return setTimeout(i.ready, 1);
                    if (i.isReady = !0, n !== !0 && --i.readyWait > 0) return;
                    e.fireWith(r, [i]),
                    i.fn.trigger && i(r).trigger("ready").unbind("ready")
                }
            },
            bindReady: function() {
                if (!e) {
                    if (e = i.Callbacks("once memory"), r.readyState === "complete") return setTimeout(i.ready, 1);
                    if (r.addEventListener) r.addEventListener("DOMContentLoaded", u, !1),
                    n.addEventListener("load", i.ready, !1);
                    else if (r.attachEvent) {
                        r.attachEvent("onreadystatechange", u),
                        n.attachEvent("onload", i.ready);
                        var t = !1;
                        try {
                            t = n.frameElement == null
                        } catch(f) {}
                        r.documentElement.doScroll && t && c()
                    }
                }
            },
            isFunction: function(n) {
                return i.type(n) === "function"
            },
            isArray: Array.isArray || 
            function(n) {
                return i.type(n) === "array"
            },
            isWindow: function(n) {
                return n && typeof n == "object" && "setInterval" in n
            },
            isNumeric: function(n) {
                return n != null && st.test(n) && !isNaN(n)
            },
            type: function(n) {
                return n == null ? String(n) : v[tt.call(n)] || "object"
            },
            isPlainObject: function(n) {
                if (!n || i.type(n) !== "object" || n.nodeType || i.isWindow(n)) return ! 1;
                try {
                    if (n.constructor && !h.call(n, "constructor") && !h.call(n.constructor.prototype, "isPrototypeOf")) return ! 1
                } catch(u) {
                    return ! 1
                }
                var r;
                for (r in n);
                return r === t || h.call(n, r)
            },
            isEmptyObject: function(n) {
                for (var t in n) return ! 1;
                return ! 0
            },
            error: function(n) {
                throw n;
            },
            parseJSON: function(t) {
                if (typeof t != "string" || !t) return null;
                if (t = i.trim(t), n.JSON && n.JSON.parse) return n.JSON.parse(t);
                if (k.test(t.replace(at, "@").replace(lt, "]").replace(ct, ""))) return new Function("return " + t)();
                i.error("Invalid JSON: " + t)
            },
            parseXML: function(r) {
                var u,
                f;
                try {
                    n.DOMParser ? (f = new DOMParser, u = f.parseFromString(r, "text/xml")) : (u = new ActiveXObject("Microsoft.XMLDOM"), u.async = "false", u.loadXML(r))
                } catch(e) {
                    u = t
                }
                return (!u || !u.documentElement || u.getElementsByTagName("parsererror").length) && i.error("Invalid XML: " + r),
                u
            },
            noop: function() {},
            globalEval: function(t) {
                t && p.test(t) && (n.execScript || 
                function(t) {
                    n.eval.call(n, t)
                })(t)
            },
            camelCase: function(n) {
                return n.replace(ut, "ms-").replace(ft, rt)
            },
            nodeName: function(n, t) {
                return n.nodeName && n.nodeName.toUpperCase() === t.toUpperCase()
            },
            each: function(n, r, u) {
                var f,
                e = 0,
                o = n.length,
                s = o === t || i.isFunction(n);
                if (u) {
                    if (s) {
                        for (f in n) if (r.apply(n[f], u) === !1) break
                    } else for (; e < o;) if (r.apply(n[e++], u) === !1) break
                } else if (s) {
                    for (f in n) if (r.call(n[f], f, n[f]) === !1) break
                } else for (; e < o;) if (r.call(n[e], e, n[e++]) === !1) break;
                return n
            },
            trim: l ? 
            function(n) {
                return n == null ? "": l.call(n)
            }: function(n) {
                return n == null ? "": (n + "").replace(w, "").replace(b, "")
            },
            makeArray: function(n, t) {
                var u = t || [],
                r;
                return n != null && (r = i.type(n), n.length == null || r === "string" || r === "function" || r === "regexp" || i.isWindow(n) ? s.call(u, n) : i.merge(u, n)),
                u
            },
            inArray: function(n, t, i) {
                var r;
                if (t) {
                    if (a) return a.call(t, n, i);
                    for (r = t.length, i = i ? i < 0 ? Math.max(0, r + i) : i: 0; i < r; i++) if (i in t && t[i] === n) return i
                }
                return - 1
            },
            merge: function(n, i) {
                var u = n.length,
                r = 0,
                f;
                if (typeof i.length == "number") for (f = i.length; r < f; r++) n[u++] = i[r];
                else while (i[r] !== t) n[u++] = i[r++];
                return n.length = u,
                n
            },
            grep: function(n, t, i) {
                var u = [],
                f,
                r,
                e;
                for (i = !!i, r = 0, e = n.length; r < e; r++) f = !!t(n[r], r),
                i !== f && u.push(n[r]);
                return u
            },
            map: function(n, r, u) {
                var f,
                h,
                e = [],
                s = 0,
                o = n.length,
                c = n instanceof i || o !== t && typeof o == "number" && (o > 0 && n[0] && n[o - 1] || o === 0 || i.isArray(n));
                if (c) for (; s < o; s++) f = r(n[s], s, u),
                f != null && (e[e.length] = f);
                else for (h in n) f = r(n[h], h, u),
                f != null && (e[e.length] = f);
                return e.concat.apply([], e)
            },
            guid: 1,
            proxy: function(n, r) {
                var e,
                o,
                u;
                return (typeof r == "string" && (e = n[r], r = n, n = e), !i.isFunction(n)) ? t: (o = f.call(arguments, 2), u = function() {
                    return n.apply(r, o.concat(f.call(arguments)))
                },
                u.guid = n.guid = n.guid || u.guid || i.guid++, u)
            },
            access: function(n, r, u, f, e, o) {
                var c = n.length,
                h,
                s;
                if (typeof r == "object") {
                    for (h in r) i.access(n, h, r[h], f, e, u);
                    return n
                }
                if (u !== t) {
                    for (f = !o && f && i.isFunction(u), s = 0; s < c; s++) e(n[s], r, f ? u.call(n[s], s, e(n[s], r)) : u, o);
                    return n
                }
                return c ? e(n[0], r) : t
            },
            now: function() {
                return + new Date
            },
            uaMatch: function(n) {
                n = n.toLowerCase();
                var t = ht.exec(n) || yt.exec(n) || ot.exec(n) || n.indexOf("compatible") < 0 && et.exec(n) || [];
                return {
                    browser: t[1] || "",
                    version: t[2] || "0"
                }
            },
            sub: function() {
                function n(t, i) {
                    return new n.fn.init(t, i)
                }
                i.extend(!0, n, this),
                n.superclass = this,
                n.fn = n.prototype = this(),
                n.fn.constructor = n,
                n.sub = this.sub,
                n.fn.init = function(r, u) {
                    return u && u instanceof i && !(u instanceof n) && (u = n(u)),
                    i.fn.init.call(this, r, u, t)
                },
                n.fn.init.prototype = n.fn;
                var t = n(r);
                return n
            },
            browser: {}
        }),
        i.each("Boolean Number String Function Array Date RegExp Object".split(" "), 
        function(n, t) {
            v["[object " + t + "]"] = t.toLowerCase()
        }),
        o = i.uaMatch(it),
        o.browser && (i.browser[o.browser] = !0, i.browser.version = o.version),
        i.browser.webkit && (i.browser.safari = !0),
        p.test(" ") && (w = /^[\s\xA0]+/, b = /[\s\xA0]+$/),
        y = i(r),
        r.addEventListener ? u = function() {
            r.removeEventListener("DOMContentLoaded", u, !1),
            i.ready()
        }: r.attachEvent && (u = function() {
            r.readyState === "complete" && (r.detachEvent("onreadystatechange", u), i.ready())
        }),
        typeof define == "function" && define.amd && define.amd.jQuery && define("jquery", [], 
        function() {
            return i
        }),
        i
    } (),
    nr = {},
    g,
    ir,
    ur,
    wi,
    y,
    b,
    or,
    l,
    vt,
    rt;
    i.Callbacks = function(n) {
        n = n ? nr[n] || ku(n) : {};
        var r = [],
        f = [],
        u,
        s,
        c,
        h,
        e,
        l = function(t) {
            for (var u, e, h, f = 0, s = t.length; f < s; f++) u = t[f],
            e = i.type(u),
            e === "array" ? l(u) : e === "function" && (!n.unique || !o.has(u)) && r.push(u)
        },
        a = function(t, i) {
            for (i = i || [], u = !n.memory || [t, i], s = !0, e = c || 0, c = 0, h = r.length; r && e < h; e++) if (r[e].apply(t, i) === !1 && n.stopOnFalse) {
                u = !0;
                break
            }
            s = !1,
            r && (n.once ? u === !0 ? o.disable() : r = [] : f && f.length && (u = f.shift(), o.fireWith(u[0], u[1])))
        },
        o = {
            add: function() {
                if (r) {
                    var n = r.length;
                    l(arguments),
                    s ? h = r.length: u && u !== !0 && (c = n, a(u[0], u[1]))
                }
                return this
            },
            remove: function() {
                var t;
                if (r) for (var u = arguments, i = 0, f = u.length; i < f; i++) for (t = 0; t < r.length; t++) if (u[i] === r[t] && (s && t <= h && (h--, t <= e && e--), r.splice(t--, 1), n.unique)) break;
                return this
            },
            has: function(n) {
                if (r) for (var t = 0, i = r.length; t < i; t++) if (n === r[t]) return ! 0;
                return ! 1
            },
            empty: function() {
                return r = [],
                this
            },
            disable: function() {
                return r = f = u = t,
                this
            },
            disabled: function() {
                return ! r
            },
            lock: function() {
                return f = t,
                (!u || u === !0) && o.disable(),
                this
            },
            locked: function() {
                return ! f
            },
            fireWith: function(t, i) {
                return f && (s ? n.once || f.push([t, i]) : (!n.once || !u) && a(t, i)),
                this
            },
            fire: function() {
                return o.fireWith(this, arguments),
                this
            },
            fired: function() {
                return !! u
            }
        };
        return o
    },
    g = [].slice,
    i.extend({
        Deferred: function(n) {
            var u = i.Callbacks("once memory"),
            f = i.Callbacks("once memory"),
            e = i.Callbacks("memory"),
            s = "pending",
            h = {
                resolve: u,
                reject: f,
                notify: e
            },
            o = {
                done: u.add,
                fail: f.add,
                progress: e.add,
                state: function() {
                    return s
                },
                isResolved: u.fired,
                isRejected: f.fired,
                then: function(n, i, r) {
                    return t.done(n).fail(i).progress(r),
                    this
                },
                always: function() {
                    return t.done.apply(t, arguments).fail.apply(t, arguments)
                },
                pipe: function(n, r, u) {
                    return i.Deferred(function(f) {
                        i.each({
                            done: [n, "resolve"],
                            fail: [r, "reject"],
                            progress: [u, "notify"]
                        },
                        function(n, r) {
                            var e = r[0],
                            o = r[1],
                            u;
                            i.isFunction(e) ? t[n](function() {
                                u = e.apply(this, arguments),
                                u && i.isFunction(u.promise) ? u.promise().then(f.resolve, f.reject, f.notify) : f[o + "With"](this === t ? f: this, [u])
                            }) : t[n](f[o])
                        })
                    }).promise()
                },
                promise: function(n) {
                    if (n == null) n = o;
                    else for (var t in o) n[t] = o[t];
                    return n
                }
            },
            t = o.promise({}),
            r;
            for (r in h) t[r] = h[r].fire,
            t[r + "With"] = h[r].fireWith;
            return t.done(function() {
                s = "resolved"
            },
            f.disable, e.lock).fail(function() {
                s = "rejected"
            },
            u.disable, e.lock),
            n && n.call(t, t),
            t
        },
        when: function(n) {
            function h(n) {
                return function(i) {
                    o[n] = arguments.length > 1 ? g.call(arguments, 0) : i,
                    t.notifyWith(s, o)
                }
            }
            function c(n) {
                return function(i) {
                    r[n] = arguments.length > 1 ? g.call(arguments, 0) : i,
                    --e || t.resolveWith(t, r)
                }
            }
            var r = g.call(arguments, 0),
            u = 0,
            f = r.length,
            o = Array(f),
            e = f,
            l = f,
            t = f <= 1 && n && i.isFunction(n.promise) ? n: i.Deferred(),
            s = t.promise();
            if (f > 1) {
                for (; u < f; u++) r[u] && r[u].promise && i.isFunction(r[u].promise) ? r[u].promise().then(c(u), t.reject, h(u)) : --e;
                e || t.resolveWith(t, r)
            } else t !== n && t.resolveWith(t, f ? [n] : []);
            return s
        }
    }),
    i.support = function() {
        var n = r.createElement("div"),
        d = r.documentElement,
        k,
        s,
        w,
        p,
        f,
        h,
        t,
        y,
        e,
        b,
        u,
        v,
        l,
        g,
        a,
        o,
        c;
        if (n.setAttribute("className", "t"), n.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>", k = n.getElementsByTagName("*"), s = n.getElementsByTagName("a")[0], !k || !k.length || !s) return {};
        w = r.createElement("select"),
        p = w.appendChild(r.createElement("option")),
        f = n.getElementsByTagName("input")[0],
        t = {
            leadingWhitespace: n.firstChild.nodeType === 3,
            tbody: !n.getElementsByTagName("tbody").length,
            htmlSerialize: !!n.getElementsByTagName("link").length,
            style: /top/.test(s.getAttribute("style")),
            hrefNormalized: s.getAttribute("href") === "/a",
            opacity: /^0.55/.test(s.style.opacity),
            cssFloat: !!s.style.cssFloat,
            unknownElems: !!n.getElementsByTagName("nav").length,
            checkOn: f.value === "on",
            optSelected: p.selected,
            getSetAttribute: n.className !== "t",
            enctype: !!r.createElement("form").enctype,
            submitBubbles: !0,
            changeBubbles: !0,
            focusinBubbles: !1,
            deleteExpando: !0,
            noCloneEvent: !0,
            inlineBlockNeedsLayout: !1,
            shrinkWrapBlocks: !1,
            reliableMarginRight: !0
        },
        f.checked = !0,
        t.noCloneChecked = f.cloneNode(!0).checked,
        w.disabled = !0,
        t.optDisabled = !p.disabled;
        try {
            delete n.test
        } catch(nt) {
            t.deleteExpando = !1
        } ! n.addEventListener && n.attachEvent && n.fireEvent && (n.attachEvent("onclick", 
        function() {
            t.noCloneEvent = !1
        }), n.cloneNode(!0).fireEvent("onclick")),
        f = r.createElement("input"),
        f.value = "t",
        f.setAttribute("type", "radio"),
        t.radioValue = f.value === "t",
        f.setAttribute("checked", "checked"),
        n.appendChild(f),
        y = r.createDocumentFragment(),
        y.appendChild(n.lastChild),
        t.checkClone = y.cloneNode(!0).cloneNode(!0).lastChild.checked,
        n.innerHTML = "",
        n.style.width = n.style.paddingLeft = "1px",
        e = r.getElementsByTagName("body")[0],
        u = r.createElement(e ? "div": "body"),
        v = {
            visibility: "hidden",
            width: 0,
            height: 0,
            border: 0,
            margin: 0,
            background: "none"
        },
        e && i.extend(v, {
            position: "absolute",
            left: "-999px",
            top: "-999px"
        });
        for (o in v) u.style[o] = v[o];
        if (u.appendChild(n), b = e || d, b.insertBefore(u, b.firstChild), t.appendChecked = f.checked, t.boxModel = n.offsetWidth === 2, "zoom" in n.style && (n.style.display = "inline", n.style.zoom = 1, t.inlineBlockNeedsLayout = n.offsetWidth === 2, n.style.display = "", n.innerHTML = "<div style='width:4px;'></div>", t.shrinkWrapBlocks = n.offsetWidth !== 2), n.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>", l = n.getElementsByTagName("td"), c = l[0].offsetHeight === 0, l[0].style.display = "", l[1].style.display = "none", t.reliableHiddenOffsets = c && l[0].offsetHeight === 0, n.innerHTML = "", r.defaultView && r.defaultView.getComputedStyle && (h = r.createElement("div"), h.style.width = "0", h.style.marginRight = "0", n.appendChild(h), t.reliableMarginRight = (parseInt((r.defaultView.getComputedStyle(h, null) || {
            marginRight: 0
        }).marginRight, 10) || 0) === 0), n.attachEvent) for (o in {
            submit: 1,
            change: 1,
            focusin: 1
        }) a = "on" + o,
        c = a in n,
        c || (n.setAttribute(a, "return;"), c = typeof n[a] == "function"),
        t[o + "Bubbles"] = c;
        return i(function() {
            var f,
            o,
            n,
            p,
            h,
            s,
            c = 1,
            l = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",
            a = "visibility:hidden;border:0;",
            v = "style='" + l + "border:5px solid #000;padding:0;'",
            y = "<div " + v + "><div></div></div><table " + v + " cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
            e = r.getElementsByTagName("body")[0],
            !e || (f = r.createElement("div"), f.style.cssText = a + "width:0;height:0;position:static;top:0;margin-top:" + c + "px", e.insertBefore(f, e.firstChild), u = r.createElement("div"), u.style.cssText = l + a, u.innerHTML = y, f.appendChild(u), o = u.firstChild, n = o.firstChild, h = o.nextSibling.firstChild.firstChild, s = {
                doesNotAddBorder: n.offsetTop !== 5,
                doesAddBorderForTableAndCells: h.offsetTop === 5
            },
            n.style.position = "fixed", n.style.top = "20px", s.fixedPosition = n.offsetTop === 20 || n.offsetTop === 15, n.style.position = n.style.top = "", o.style.overflow = "hidden", o.style.position = "relative", s.subtractsBorderForOverflowNotVisible = n.offsetTop === -5, s.doesNotIncludeMarginInBodyOffset = e.offsetTop !== c, e.removeChild(f), u = f = null, i.extend(t, s))
        }),
        u.innerHTML = "",
        b.removeChild(u),
        u = y = w = p = e = h = n = f = null,
        t
    } (),
    i.boxModel = i.support.boxModel,
    ir = /^(?:\{.*\}|\[.*\])$/,
    ur = /([A-Z])/g,
    i.extend({
        cache: {},
        uuid: 0,
        expando: "jQuery" + (i.fn.jquery + Math.random()).replace(/\D/g, ""),
        noData: {
            embed: !0,
            object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
            applet: !0
        },
        hasData: function(n) {
            return n = n.nodeType ? i.cache[n[i.expando]] : n[i.expando],
            !!n && !ot(n)
        },
        data: function(n, r, u, f) {
            if ( !! i.acceptData(n)) {
                var l,
                o,
                h,
                y = i.expando,
                a = typeof r == "string",
                c = n.nodeType,
                s = c ? i.cache: n,
                e = c ? n[i.expando] : n[i.expando] && i.expando,
                v = r === "events";
                return (!e || !s[e] || !v && !f && !s[e].data) && a && u === t ? void 0: (e || (c ? n[i.expando] = e = ++i.uuid: e = i.expando), s[e] || (s[e] = {},
                c || (s[e].toJSON = i.noop)), (typeof r == "object" || typeof r == "function") && (f ? s[e] = i.extend(s[e], r) : s[e].data = i.extend(s[e].data, r)), l = o = s[e], f || (o.data || (o.data = {}), o = o.data), u !== t && (o[i.camelCase(r)] = u), v && !o[r]) ? l.events: (a ? (h = o[r], h == null && (h = o[i.camelCase(r)])) : h = o, h)
            }
        },
        removeData: function(n, t, r) {
            if ( !! i.acceptData(n)) {
                var e,
                o,
                h,
                c = i.expando,
                s = n.nodeType,
                u = s ? i.cache: n,
                f = s ? n[i.expando] : i.expando;
                if (!u[f]) return;
                if (t && (e = r ? u[f] : u[f].data, e)) {
                    for (i.isArray(t) ? t = t: (t in e) ? t = [t] : (t = i.camelCase(t), t = t in e ? [t] : t.split(" ")), o = 0, h = t.length; o < h; o++) delete e[t[o]];
                    if (! (r ? ot: i.isEmptyObject)(e)) return
                }
                if (!r && (delete u[f].data, !ot(u[f]))) return;
                i.support.deleteExpando || !u.setInterval ? delete u[f] : u[f] = null,
                s && (i.support.deleteExpando ? delete n[i.expando] : n.removeAttribute ? n.removeAttribute(i.expando) : n[i.expando] = null)
            }
        },
        _data: function(n, t, r) {
            return i.data(n, t, r, !0)
        },
        acceptData: function(n) {
            if (n.nodeName) {
                var t = i.noData[n.nodeName.toLowerCase()];
                if (t) return t !== !0 && n.getAttribute("classid") === t
            }
            return ! 0
        }
    }),
    i.fn.extend({
        data: function(n, r) {
            var u,
            s,
            e,
            f = null,
            o,
            h;
            if (typeof n == "undefined") {
                if (this.length && (f = i.data(this[0]), this[0].nodeType === 1 && !i._data(this[0], "parsedAttrs"))) {
                    for (s = this[0].attributes, o = 0, h = s.length; o < h; o++) e = s[o].name,
                    e.indexOf("data-") === 0 && (e = i.camelCase(e.substring(5)), pi(this[0], e, f[e]));
                    i._data(this[0], "parsedAttrs", !0)
                }
                return f
            }
            return typeof n == "object" ? this.each(function() {
                i.data(this, n)
            }) : (u = n.split("."), u[1] = u[1] ? "." + u[1] : "", r === t) ? (f = this.triggerHandler("getData" + u[1] + "!", [u[0]]), f === t && this.length && (f = i.data(this[0], n), f = pi(this[0], n, f)), f === t && u[1] ? this.data(u[0]) : f) : this.each(function() {
                var t = i(this),
                f = [u[0], r];
                t.triggerHandler("setData" + u[1] + "!", f),
                i.data(this, n, r),
                t.triggerHandler("changeData" + u[1] + "!", f)
            })
        },
        removeData: function(n) {
            return this.each(function() {
                i.removeData(this, n)
            })
        }
    }),
    i.extend({
        _mark: function(n, t) {
            n && (t = (t || "fx") + "mark", i._data(n, t, (i._data(n, t) || 0) + 1))
        },
        _unmark: function(n, t, r) {
            if (n !== !0 && (r = t, t = n, n = !1), t) {
                r = r || "fx";
                var u = r + "mark",
                f = n ? 0: (i._data(t, u) || 1) - 1;
                f ? i._data(t, u, f) : (i.removeData(t, u, !0), yi(t, r, "mark"))
            }
        },
        queue: function(n, t, r) {
            var u;
            if (n) return t = (t || "fx") + "queue",
            u = i._data(n, t),
            r && (!u || i.isArray(r) ? u = i._data(n, t, i.makeArray(r)) : u.push(r)),
            u || []
        },
        dequeue: function(n, t) {
            t = t || "fx";
            var r = i.queue(n, t),
            u = r.shift(),
            f = {};
            u === "inprogress" && (u = r.shift()),
            u && (t === "fx" && r.unshift("inprogress"), i._data(n, t + ".run", f), u.call(n, 
            function() {
                i.dequeue(n, t)
            },
            f)),
            r.length || (i.removeData(n, t + "queue " + t + ".run", !0), yi(n, t, "queue"))
        }
    }),
    i.fn.extend({
        queue: function(n, r) {
            return (typeof n != "string" && (r = n, n = "fx"), r === t) ? i.queue(this[0], n) : this.each(function() {
                var t = i.queue(this, n, r);
                n === "fx" && t[0] !== "inprogress" && i.dequeue(this, n)
            })
        },
        dequeue: function(n) {
            return this.each(function() {
                i.dequeue(this, n)
            })
        },
        delay: function(n, t) {
            return n = i.fx ? i.fx.speeds[n] || n: n,
            t = t || "fx",
            this.queue(t, 
            function(t, i) {
                var r = setTimeout(t, n);
                i.stop = function() {
                    clearTimeout(r)
                }
            })
        },
        clearQueue: function(n) {
            return this.queue(n || "fx", [])
        },
        promise: function(n, r) {
            function e() {--s || o.resolveWith(u, [u])
            }
            typeof n != "string" && (r = n, n = t),
            n = n || "fx";
            for (var o = i.Deferred(), u = this, f = u.length, s = 1, h = n + "defer", l = n + "queue", a = n + "mark", c; f--;)(c = i.data(u[f], h, t, !0) || (i.data(u[f], l, t, !0) || i.data(u[f], a, t, !0)) && i.data(u[f], h, i.Callbacks("once memory"), !0)) && (s++, c.add(e));
            return e(),
            o.promise()
        }
    });
    var fr = /[\n\t\r]/g,
    d = /\s+/,
    pu = /\r/g,
    yu = /^(?:button|input)$/i,
    vu = /^(?:button|input|object|select|textarea)$/i,
    au = /^a(?:rea)?$/i,
    sr = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
    hr = i.support.getSetAttribute,
    e,
    cr,
    ai;
    i.fn.extend({
        attr: function(n, t) {
            return i.access(this, n, t, !0, i.attr)
        },
        removeAttr: function(n) {
            return this.each(function() {
                i.removeAttr(this, n)
            })
        },
        prop: function(n, t) {
            return i.access(this, n, t, !0, i.prop)
        },
        removeProp: function(n) {
            return n = i.propFix[n] || n,
            this.each(function() {
                try {
                    this[n] = t,
                    delete this[n]
                } catch(i) {}
            })
        },
        addClass: function(n) {
            var r,
            f,
            o,
            t,
            e,
            u,
            s;
            if (i.isFunction(n)) return this.each(function(t) {
                i(this).addClass(n.call(this, t, this.className))
            });
            if (n && typeof n == "string") for (r = n.split(d), f = 0, o = this.length; f < o; f++) if (t = this[f], t.nodeType === 1) if (t.className || r.length !== 1) {
                for (e = " " + t.className + " ", u = 0, s = r.length; u < s; u++)~e.indexOf(" " + r[u] + " ") || (e += r[u] + " ");
                t.className = i.trim(e)
            } else t.className = n;
            return this
        },
        removeClass: function(n) {
            var o,
            u,
            s,
            r,
            f,
            e,
            h;
            if (i.isFunction(n)) return this.each(function(t) {
                i(this).removeClass(n.call(this, t, this.className))
            });
            if (n && typeof n == "string" || n === t) for (o = (n || "").split(d), u = 0, s = this.length; u < s; u++) if (r = this[u], r.nodeType === 1 && r.className) if (n) {
                for (f = (" " + r.className + " ").replace(fr, " "), e = 0, h = o.length; e < h; e++) f = f.replace(" " + o[e] + " ", " ");
                r.className = i.trim(f)
            } else r.className = "";
            return this
        },
        toggleClass: function(n, t) {
            var r = typeof n,
            u = typeof t == "boolean";
            return i.isFunction(n) ? this.each(function(r) {
                i(this).toggleClass(n.call(this, r, this.className, t), t)
            }) : this.each(function() {
                if (r === "string") for (var f, s = 0, o = i(this), e = t, h = n.split(d); f = h[s++];) e = u ? e: !o.hasClass(f),
                o[e ? "addClass": "removeClass"](f);
                else(r === "undefined" || r === "boolean") && (this.className && i._data(this, "__className__", this.className), this.className = this.className || n === !1 ? "": i._data(this, "__className__") || "")
            })
        },
        hasClass: function(n) {
            for (var i = " " + n + " ", t = 0, r = this.length; t < r; t++) if (this[t].nodeType === 1 && (" " + this[t].className + " ").replace(fr, " ").indexOf(i) > -1) return ! 0;
            return ! 1
        },
        val: function(n) {
            var r,
            u,
            e,
            f = this[0];
            return arguments.length ? (e = i.isFunction(n), this.each(function(u) {
                var o = i(this),
                f;
                this.nodeType === 1 && (f = e ? n.call(this, u, o.val()) : n, f == null ? f = "": typeof f == "number" ? f += "": i.isArray(f) && (f = i.map(f, 
                function(n) {
                    return n == null ? "": n + ""
                })), r = i.valHooks[this.nodeName.toLowerCase()] || i.valHooks[this.type], r && "set" in r && r.set(this, f, "value") !== t || (this.value = f))
            })) : f ? (r = i.valHooks[f.nodeName.toLowerCase()] || i.valHooks[f.type], r && "get" in r && (u = r.get(f, "value")) !== t) ? u: (u = f.value, typeof u == "string" ? u.replace(pu, "") : u == null ? "": u) : t
        }
    }),
    i.extend({
        valHooks: {
            option: {
                get: function(n) {
                    var t = n.attributes.value;
                    return ! t || t.specified ? n.value: n.text
                }
            },
            select: {
                get: function(n) {
                    var o,
                    r,
                    h,
                    t,
                    u = n.selectedIndex,
                    s = [],
                    f = n.options,
                    e = n.type === "select-one";
                    if (u < 0) return null;
                    for (r = e ? u: 0, h = e ? u + 1: f.length; r < h; r++) if (t = f[r], t.selected && (i.support.optDisabled ? !t.disabled: t.getAttribute("disabled") === null) && (!t.parentNode.disabled || !i.nodeName(t.parentNode, "optgroup"))) {
                        if (o = i(t).val(), e) return o;
                        s.push(o)
                    }
                    return e && !s.length && f.length ? i(f[u]).val() : s
                },
                set: function(n, t) {
                    var r = i.makeArray(t);
                    return i(n).find("option").each(function() {
                        this.selected = i.inArray(i(this).val(), r) >= 0
                    }),
                    r.length || (n.selectedIndex = -1),
                    r
                }
            }
        },
        attrFn: {
            val: !0,
            css: !0,
            html: !0,
            text: !0,
            data: !0,
            width: !0,
            height: !0,
            offset: !0
        },
        attr: function(n, r, u, f) {
            var o,
            s,
            h,
            c = n.nodeType;
            return ! n || c === 3 || c === 8 || c === 2 ? t: f && r in i.attrFn ? i(n)[r](u) : "getAttribute" in n ? (h = c !== 1 || !i.isXMLDoc(n), h && (r = r.toLowerCase(), s = i.attrHooks[r] || (sr.test(r) ? cr: e)), u !== t) ? u === null ? (i.removeAttr(n, r), t) : s && "set" in s && h && (o = s.set(n, u, r)) !== t ? o: (n.setAttribute(r, "" + u), u) : s && "get" in s && h && (o = s.get(n, r)) !== null ? o: (o = n.getAttribute(r), o === null ? t: o) : i.prop(n, r, u)
        },
        removeAttr: function(n, t) {
            var u,
            f,
            r,
            o,
            e = 0;
            if (n.nodeType === 1) for (f = (t || "").split(d), o = f.length; e < o; e++) r = f[e].toLowerCase(),
            u = i.propFix[r] || r,
            i.attr(n, r, ""),
            n.removeAttribute(hr ? r: u),
            sr.test(r) && u in n && (n[u] = !1)
        },
        attrHooks: {
            type: {
                set: function(n, t) {
                    if (yu.test(n.nodeName) && n.parentNode) i.error("type property can't be changed");
                    else if (!i.support.radioValue && t === "radio" && i.nodeName(n, "input")) {
                        var r = n.value;
                        return n.setAttribute("type", t),
                        r && (n.value = r),
                        t
                    }
                }
            },
            value: {
                get: function(n, t) {
                    return e && i.nodeName(n, "button") ? e.get(n, t) : t in n ? n.value: null
                },
                set: function(n, t, r) {
                    if (e && i.nodeName(n, "button")) return e.set(n, t, r);
                    n.value = t
                }
            }
        },
        propFix: {
            tabindex: "tabIndex",
            readonly: "readOnly",
            "for": "htmlFor",
            "class": "className",
            maxlength: "maxLength",
            cellspacing: "cellSpacing",
            cellpadding: "cellPadding",
            rowspan: "rowSpan",
            colspan: "colSpan",
            usemap: "useMap",
            frameborder: "frameBorder",
            contenteditable: "contentEditable"
        },
        prop: function(n, r, u) {
            var e,
            f,
            s,
            o = n.nodeType;
            return ! n || o === 3 || o === 8 || o === 2 ? t: (s = o !== 1 || !i.isXMLDoc(n), s && (r = i.propFix[r] || r, f = i.propHooks[r]), u !== t ? f && "set" in f && (e = f.set(n, u, r)) !== t ? e: n[r] = u: f && "get" in f && (e = f.get(n, r)) !== null ? e: n[r])
        },
        propHooks: {
            tabIndex: {
                get: function(n) {
                    var i = n.getAttributeNode("tabindex");
                    return i && i.specified ? parseInt(i.value, 10) : vu.test(n.nodeName) || au.test(n.nodeName) && n.href ? 0: t
                }
            }
        }
    }),
    i.attrHooks.tabindex = i.propHooks.tabIndex,
    cr = {
        get: function(n, r) {
            var u,
            f = i.prop(n, r);
            return f === !0 || typeof f != "boolean" && (u = n.getAttributeNode(r)) && u.nodeValue !== !1 ? r.toLowerCase() : t
        },
        set: function(n, t, r) {
            var u;
            return t === !1 ? i.removeAttr(n, r) : (u = i.propFix[r] || r, u in n && (n[u] = !0), n.setAttribute(r, r.toLowerCase())),
            r
        }
    },
    hr || (ai = {
        name: !0,
        id: !0
    },
    e = i.valHooks.button = {
        get: function(n, i) {
            var r;
            return r = n.getAttributeNode(i),
            r && (ai[i] ? r.nodeValue !== "": r.specified) ? r.nodeValue: t
        },
        set: function(n, t, i) {
            var u = n.getAttributeNode(i);
            return u || (u = r.createAttribute(i), n.setAttributeNode(u)),
            u.nodeValue = t + ""
        }
    },
    i.attrHooks.tabindex.set = e.set, i.each(["width", "height"], 
    function(n, t) {
        i.attrHooks[t] = i.extend(i.attrHooks[t], {
            set: function(n, i) {
                if (i === "") return n.setAttribute(t, "auto"),
                i
            }
        })
    }), i.attrHooks.contenteditable = {
        get: e.get,
        set: function(n, t, i) {
            t === "" && (t = "false"),
            e.set(n, t, i)
        }
    }),
    i.support.hrefNormalized || i.each(["href", "src", "width", "height"], 
    function(n, r) {
        i.attrHooks[r] = i.extend(i.attrHooks[r], {
            get: function(n) {
                var i = n.getAttribute(r, 2);
                return i === null ? t: i
            }
        })
    }),
    i.support.style || (i.attrHooks.style = {
        get: function(n) {
            return n.style.cssText.toLowerCase() || t
        },
        set: function(n, t) {
            return n.style.cssText = "" + t
        }
    }),
    i.support.optSelected || (i.propHooks.selected = i.extend(i.propHooks.selected, {
        get: function(n) {
            var t = n.parentNode;
            return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex),
            null
        }
    })),
    i.support.enctype || (i.propFix.enctype = "encoding"),
    i.support.checkOn || i.each(["radio", "checkbox"], 
    function() {
        i.valHooks[this] = {
            get: function(n) {
                return n.getAttribute("value") === null ? "on": n.value
            }
        }
    }),
    i.each(["radio", "checkbox"], 
    function() {
        i.valHooks[this] = i.extend(i.valHooks[this], {
            set: function(n, t) {
                if (i.isArray(t)) return n.checked = i.inArray(i(n).val(), t) >= 0
            }
        })
    });
    var fe = /\.(.*)$/,
    st = /^(?:textarea|input|select)$/i,
    ee = /\./g,
    oe = / /g,
    se = /[^\w\s.|`]/g,
    pt = /^([^\.]*)?(?:\.(.+))?$/,
    lu = /\bhover(\.\S+)?/,
    cu = /^key/,
    of = /^(?:mouse|contextmenu)|click/,
    ef = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
    kf = function(n) {
        var t = ef.exec(n);
        return t && (t[1] = (t[1] || "").toLowerCase(), t[3] = t[3] && new RegExp("(?:^|\\s)" + t[3] + "(?:\\s|$)")),
        t
    },
    sf = function(n, t) {
        return (!t[1] || n.nodeName.toLowerCase() === t[1]) && (!t[2] || n.id === t[2]) && (!t[3] || t[3].test(n.className))
    },
    ni = function(n) {
        return i.event.special.hover ? n: n.replace(lu, "mouseenter$1 mouseleave$1")
    };
    i.event = {
        add: function(n, r, u, f, e) {
            var a,
            c,
            v,
            p,
            y,
            o,
            w,
            s,
            b,
            k,
            l,
            h;
            if (! (n.nodeType === 3 || n.nodeType === 8 || !r || !u || !(a = i._data(n)))) {
                for (u.handler && (b = u, u = b.handler), u.guid || (u.guid = i.guid++), v = a.events, v || (a.events = v = {}), c = a.handle, c || (a.handle = c = function(n) {
                    return typeof i != "undefined" && (!n || i.event.triggered !== n.type) ? i.event.dispatch.apply(c.elem, arguments) : t
                },
                c.elem = n), r = ni(r).split(" "), p = 0; p < r.length; p++) y = pt.exec(r[p]) || [],
                o = y[1],
                w = (y[2] || "").split(".").sort(),
                h = i.event.special[o] || {},
                o = (e ? h.delegateType: h.bindType) || o,
                h = i.event.special[o] || {},
                s = i.extend({
                    type: o,
                    origType: y[1],
                    data: f,
                    handler: u,
                    guid: u.guid,
                    selector: e,
                    namespace: w.join(".")
                },
                b),
                e && (s.quick = kf(e), !s.quick && i.expr.match.POS.test(e) && (s.isPositional = !0)),
                l = v[o],
                l || (l = v[o] = [], l.delegateCount = 0, h.setup && h.setup.call(n, f, w, c) !== !1 || (n.addEventListener ? n.addEventListener(o, c, !1) : n.attachEvent && n.attachEvent("on" + o, c))),
                h.add && (h.add.call(n, s), s.handler.guid || (s.handler.guid = u.guid)),
                e ? l.splice(l.delegateCount++, 0, s) : l.push(s),
                i.event.global[o] = !0;
                n = null
            }
        },
        global: {},
        remove: function(n, t, r, u) {
            var a = i.hasData(n) && i._data(n),
            v,
            y,
            o,
            f,
            w,
            h,
            l,
            s,
            p,
            e,
            c;
            if ( !! a && !!(l = a.events)) {
                for (t = ni(t || "").split(" "), v = 0; v < t.length; v++) {
                    if (y = pt.exec(t[v]) || [], o = y[1], f = y[2], !o) {
                        f = f ? "." + f: "";
                        for (h in l) i.event.remove(n, h + f, r, u);
                        return
                    }
                    if (s = i.event.special[o] || {},
                    o = (u ? s.delegateType: s.bindType) || o, e = l[o] || [], w = e.length, f = f ? new RegExp("(^|\\.)" + f.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null, r || f || u || s.remove) for (h = 0; h < e.length; h++) c = e[h],
                    r && r.guid !== c.guid || (!f || f.test(c.namespace)) && (!u || u === c.selector || u === "**" && c.selector) && (e.splice(h--, 1), c.selector && e.delegateCount--, s.remove && s.remove.call(n, c));
                    else e.length = 0;
                    e.length === 0 && w !== e.length && ((!s.teardown || s.teardown.call(n, f) === !1) && i.removeEvent(n, o, a.handle), delete l[o])
                }
                i.isEmptyObject(l) && (p = a.handle, p && (p.elem = null), i.removeData(n, ["events", "handle"], !0))
            }
        },
        customEvent: {
            getData: !0,
            setData: !0,
            changeData: !0
        },
        trigger: function(r, u, f, e) {
            if (!f || f.nodeType !== 3 && f.nodeType !== 8) {
                var o = r.type || r,
                p = [],
                w,
                k,
                c,
                s,
                h,
                a,
                l,
                v,
                y,
                b;
                if (o.indexOf("!") >= 0 && (o = o.slice(0, -1), k = !0), o.indexOf(".") >= 0 && (p = o.split("."), o = p.shift(), p.sort()), (!f || i.event.customEvent[o]) && !i.event.global[o]) return;
                if (r = typeof r == "object" ? r[i.expando] ? r: new i.Event(o, r) : new i.Event(o), r.type = o, r.isTrigger = !0, r.exclusive = k, r.namespace = p.join("."), r.namespace_re = r.namespace ? new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.)?") + "(\\.|$)") : null, a = o.indexOf(":") < 0 ? "on" + o: "", (e || !f) && r.preventDefault(), !f) {
                    w = i.cache;
                    for (c in w) w[c].events && w[c].events[o] && i.event.trigger(r, u, w[c].handle.elem, !0);
                    return
                }
                if (r.result = t, r.target || (r.target = f), u = u != null ? i.makeArray(u) : [], u.unshift(r), l = i.event.special[o] || {},
                l.trigger && l.trigger.apply(f, u) === !1) return;
                if (y = [[f, l.bindType || o]], !e && !l.noBubble && !i.isWindow(f)) {
                    for (b = l.delegateType || o, h = null, s = f.parentNode; s; s = s.parentNode) y.push([s, b]),
                    h = s;
                    h && h === f.ownerDocument && y.push([h.defaultView || h.parentWindow || n, b])
                }
                for (c = 0; c < y.length; c++) if (s = y[c][0], r.type = y[c][1], v = (i._data(s, "events") || {})[r.type] && i._data(s, "handle"), v && v.apply(s, u), v = a && s[a], v && i.acceptData(s) && v.apply(s, u), r.isPropagationStopped()) break;
                return r.type = o,
                r.isDefaultPrevented() || (!l._default || l._default.apply(f.ownerDocument, u) === !1) && (o !== "click" || !i.nodeName(f, "a")) && i.acceptData(f) && a && f[o] && (o !== "focus" && o !== "blur" || r.target.offsetWidth !== 0) && !i.isWindow(f) && (h = f[a], h && (f[a] = null), i.event.triggered = o, f[o](), i.event.triggered = t, h && (f[a] = h)),
                r.result
            }
        },
        dispatch: function(r) {
            r = i.event.fix(r || n.event);
            var p = (i._data(this, "events") || {})[r.type] || [],
            y = p.delegateCount,
            b = [].slice.call(arguments, 0),
            d = !r.exclusive && !r.namespace,
            k = (i.event.special[r.type] || {}).handle,
            w = [],
            f,
            v,
            e,
            a,
            l,
            h,
            c,
            u,
            o,
            s,
            g;
            if (b[0] = r, r.delegateTarget = this, y && !r.target.disabled && (!r.button || r.type !== "click")) for (e = r.target; e != this; e = e.parentNode || this) {
                for (l = {},
                c = [], f = 0; f < y; f++) u = p[f],
                o = u.selector,
                s = l[o],
                u.isPositional ? s = (s || (l[o] = i(o))).index(e) >= 0: s === t && (s = l[o] = u.quick ? sf(e, u.quick) : i(e).is(o)),
                s && c.push(u);
                c.length && w.push({
                    elem: e,
                    matches: c
                })
            }
            for (p.length > y && w.push({
                elem: this,
                matches: p.slice(y)
            }), f = 0; f < w.length && !r.isPropagationStopped(); f++) for (h = w[f], r.currentTarget = h.elem, v = 0; v < h.matches.length && !r.isImmediatePropagationStopped(); v++) u = h.matches[v],
            (d || !r.namespace && !u.namespace || r.namespace_re && r.namespace_re.test(u.namespace)) && (r.data = u.data, r.handleObj = u, a = (k || u.handler).apply(h.elem, b), a !== t && (r.result = a, a === !1 && (r.preventDefault(), r.stopPropagation())));
            return r.result
        },
        props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
        fixHooks: {},
        keyHooks: {
            props: "char charCode key keyCode".split(" "),
            filter: function(n, t) {
                return n.which == null && (n.which = t.charCode != null ? t.charCode: t.keyCode),
                n
            }
        },
        mouseHooks: {
            props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "),
            filter: function(n, i) {
                var o,
                u,
                f,
                e = i.button,
                s = i.fromElement;
                return n.pageX == null && i.clientX != null && (o = n.target.ownerDocument || r, u = o.documentElement, f = o.body, n.pageX = i.clientX + (u && u.scrollLeft || f && f.scrollLeft || 0) - (u && u.clientLeft || f && f.clientLeft || 0), n.pageY = i.clientY + (u && u.scrollTop || f && f.scrollTop || 0) - (u && u.clientTop || f && f.clientTop || 0)),
                !n.relatedTarget && s && (n.relatedTarget = s === n.target ? i.toElement: s),
                !n.which && e !== t && (n.which = e & 1 ? 1: e & 2 ? 3: e & 4 ? 2: 0),
                n
            }
        },
        fix: function(n) {
            if (n[i.expando]) return n;
            var e,
            o,
            u = n,
            f = i.event.fixHooks[n.type] || {},
            s = f.props ? this.props.concat(f.props) : this.props;
            for (n = i.Event(u), e = s.length; e;) o = s[--e],
            n[o] = u[o];
            return n.target || (n.target = u.srcElement || r),
            n.target.nodeType === 3 && (n.target = n.target.parentNode),
            n.metaKey === t && (n.metaKey = n.ctrlKey),
            f.filter ? f.filter(n, u) : n
        },
        special: {
            ready: {
                setup: i.bindReady
            },
            focus: {
                delegateType: "focusin",
                noBubble: !0
            },
            blur: {
                delegateType: "focusout",
                noBubble: !0
            },
            beforeunload: {
                setup: function(n, t, r) {
                    i.isWindow(this) && (this.onbeforeunload = r)
                },
                teardown: function(n, t) {
                    this.onbeforeunload === t && (this.onbeforeunload = null)
                }
            }
        },
        simulate: function(n, t, r, u) {
            var f = i.extend(new i.Event, r, {
                type: n,
                isSimulated: !0,
                originalEvent: {}
            });
            u ? i.event.trigger(f, null, t) : i.event.dispatch.call(t, f),
            f.isDefaultPrevented() && r.preventDefault()
        }
    },
    i.event.handle = i.event.dispatch,
    i.removeEvent = r.removeEventListener ? 
    function(n, t, i) {
        n.removeEventListener && n.removeEventListener(t, i, !1)
    }: function(n, t, i) {
        n.detachEvent && n.detachEvent("on" + t, i)
    },
    i.Event = function(n, t) {
        if (! (this instanceof i.Event)) return new i.Event(n, t);
        n && n.type ? (this.originalEvent = n, this.type = n.type, this.isDefaultPrevented = n.defaultPrevented || n.returnValue === !1 || n.getPreventDefault && n.getPreventDefault() ? nt: v) : this.type = n,
        t && i.extend(this, t),
        this.timeStamp = n && n.timeStamp || i.now(),
        this[i.expando] = !0
    },
    i.Event.prototype = {
        preventDefault: function() {
            this.isDefaultPrevented = nt;
            var n = this.originalEvent; ! n || (n.preventDefault ? n.preventDefault() : n.returnValue = !1)
        },
        stopPropagation: function() {
            this.isPropagationStopped = nt;
            var n = this.originalEvent; ! n || (n.stopPropagation && n.stopPropagation(), n.cancelBubble = !0)
        },
        stopImmediatePropagation: function() {
            this.isImmediatePropagationStopped = nt,
            this.stopPropagation()
        },
        isDefaultPrevented: v,
        isPropagationStopped: v,
        isImmediatePropagationStopped: v
    },
    i.each({
        mouseenter: "mouseover",
        mouseleave: "mouseout"
    },
    function(n, t) {
        i.event.special[n] = i.event.special[t] = {
            delegateType: t,
            bindType: t,
            handle: function(n) {
                var u = this,
                r = n.relatedTarget,
                t = n.handleObj,
                o = t.selector,
                f,
                e;
                return r && t.origType !== n.type && (r === u || i.contains(u, r)) || (f = n.type, n.type = t.origType, e = t.handler.apply(this, arguments), n.type = f),
                e
            }
        }
    }),
    i.support.submitBubbles || (i.event.special.submit = {
        setup: function() {
            if (i.nodeName(this, "form")) return ! 1;
            i.event.add(this, "click._submit keypress._submit", 
            function(n) {
                var u = n.target,
                r = i.nodeName(u, "input") || i.nodeName(u, "button") ? u.form: t;
                r && !r._submit_attached && (i.event.add(r, "submit._submit", 
                function(n) {
                    this.parentNode && i.event.simulate("submit", this.parentNode, n, !0)
                }), r._submit_attached = !0)
            })
        },
        teardown: function() {
            if (i.nodeName(this, "form")) return ! 1;
            i.event.remove(this, "._submit")
        }
    }),
    i.support.changeBubbles || (i.event.special.change = {
        setup: function() {
            if (st.test(this.nodeName)) return (this.type === "checkbox" || this.type === "radio") && (i.event.add(this, "propertychange._change", 
            function(n) {
                n.originalEvent.propertyName === "checked" && (this._just_changed = !0)
            }), i.event.add(this, "click._change", 
            function(n) {
                this._just_changed && (this._just_changed = !1, i.event.simulate("change", this, n, !0))
            })),
            !1;
            i.event.add(this, "beforeactivate._change", 
            function(n) {
                var t = n.target;
                st.test(t.nodeName) && !t._change_attached && (i.event.add(t, "change._change", 
                function(n) {
                    this.parentNode && !n.isSimulated && i.event.simulate("change", this.parentNode, n, !0)
                }), t._change_attached = !0)
            })
        },
        handle: function(n) {
            var t = n.target;
            if (this !== t || n.isSimulated || n.isTrigger || t.type !== "radio" && t.type !== "checkbox") return n.handleObj.handler.apply(this, arguments)
        },
        teardown: function() {
            return i.event.remove(this, "._change"),
            st.test(this.nodeName)
        }
    }),
    i.support.focusinBubbles || i.each({
        focus: "focusin",
        blur: "focusout"
    },
    function(n, t) {
        var u = 0,
        f = function(n) {
            i.event.simulate(t, n.target, i.event.fix(n), !0)
        };
        i.event.special[t] = {
            setup: function() {
                u++==0 && r.addEventListener(n, f, !0)
            },
            teardown: function() {--u == 0 && r.removeEventListener(n, f, !0)
            }
        }
    }),
    i.fn.extend({
        on: function(n, r, u, f, e) {
            var o,
            s;
            if (typeof n == "object") {
                typeof r != "string" && (u = r, r = t);
                for (s in n) this.on(s, r, u, n[s], e);
                return this
            }
            if (u == null && f == null ? (f = r, u = r = t) : f == null && (typeof r == "string" ? (f = u, u = t) : (f = u, u = r, r = t)), f === !1) f = v;
            else if (!f) return this;
            return e === 1 && (o = f, f = function(n) {
                return i().off(n),
                o.apply(this, arguments)
            },
            f.guid = o.guid || (o.guid = i.guid++)),
            this.each(function() {
                i.event.add(this, n, f, u, r)
            })
        },
        one: function(n, t, i, r) {
            return this.on.call(this, n, t, i, r, 1)
        },
        off: function(n, r, u) {
            var f,
            e;
            if (n && n.preventDefault && n.handleObj) return f = n.handleObj,
            i(n.delegateTarget).off(f.namespace ? f.type + "." + f.namespace: f.type, f.selector, f.handler),
            this;
            if (typeof n == "object") {
                for (e in n) this.off(e, r, n[e]);
                return this
            }
            return (r === !1 || typeof r == "function") && (u = r, r = t),
            u === !1 && (u = v),
            this.each(function() {
                i.event.remove(this, n, u, r)
            })
        },
        bind: function(n, t, i) {
            return this.on(n, null, t, i)
        },
        unbind: function(n, t) {
            return this.off(n, null, t)
        },
        live: function(n, t, r) {
            i(this.context).on(n, this.selector, t, r);
            return this
        },
        die: function(n, t) {
            return i(this.context).off(n, this.selector || "**", t),
            this
        },
        delegate: function(n, t, i, r) {
            return this.on(t, n, i, r)
        },
        undelegate: function(n, t, i) {
            return arguments.length == 1 ? this.off(n, "**") : this.off(t, n, i)
        },
        trigger: function(n, t) {
            return this.each(function() {
                i.event.trigger(n, t, this)
            })
        },
        triggerHandler: function(n, t) {
            if (this[0]) return i.event.trigger(n, t, this[0], !0)
        },
        toggle: function(n) {
            var t = arguments,
            u = n.guid || i.guid++,
            r = 0,
            f = function(u) {
                var f = (i._data(this, "lastToggle" + n.guid) || 0) % r;
                return i._data(this, "lastToggle" + n.guid, f + 1),
                u.preventDefault(),
                t[f].apply(this, arguments) || !1
            };
            for (f.guid = u; r < t.length;) t[r++].guid = u;
            return this.click(f)
        },
        hover: function(n, t) {
            return this.mouseenter(n).mouseleave(t || n)
        }
    }),
    i.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), 
    function(n, t) {
        i.fn[t] = function(n, i) {
            return i == null && (i = n, n = null),
            arguments.length > 0 ? this.bind(t, n, i) : this.trigger(t)
        },
        i.attrFn && (i.attrFn[t] = !0),
        cu.test(t) && (i.event.fixHooks[t] = i.event.keyHooks),
        of.test(t) && (i.event.fixHooks[t] = i.event.mouseHooks)
    }),
    function() {
        function b(t, i, r, u, f, o) {
            for (var s, c, h = 0, l = u.length; h < l; h++) if (s = u[h], s) {
                for (c = !1, s = s[t]; s;) {
                    if (s[e] === r) {
                        c = u[s.sizset];
                        break
                    }
                    if (s.nodeType === 1) if (o || (s[e] = r, s.sizset = h), typeof i != "string") {
                        if (s === i) {
                            c = !0;
                            break
                        }
                    } else if (n.filter(i, [s]).length > 0) {
                        c = s;
                        break
                    }
                    s = s[t]
                }
                u[h] = c
            }
        }
        function g(n, t, i, r, u, f) {
            for (var o, h, s = 0, c = r.length; s < c; s++) if (o = r[s], o) {
                for (h = !1, o = o[n]; o;) {
                    if (o[e] === i) {
                        h = r[o.sizset];
                        break
                    }
                    if (o.nodeType === 1 && !f && (o[e] = i, o.sizset = s), o.nodeName.toLowerCase() === t) {
                        h = o;
                        break
                    }
                    o = o[n]
                }
                r[s] = h
            }
        }
        var v = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
        e = "sizcache" + (Math.random() + "").replace(".", ""),
        y = 0,
        d = Object.prototype.toString,
        a = !1,
        k = !0,
        o = /\\/g,
        tt = /\r\n/g,
        c = /\W/,
        n,
        h,
        f,
        l,
        s,
        p; [0, 0].sort(function() {
            return k = !1,
            0
        }),
        n = function(t, i, e, o) {
            var nt;
            if (e = e || [], i = i || r, nt = i, i.nodeType !== 1 && i.nodeType !== 9) return [];
            if (!t || typeof t != "string") return e;
            var y,
            a,
            h,
            g,
            l,
            w,
            b,
            c,
            tt = !0,
            k = n.isXML(i),
            s = [],
            rt = t;
            do
            if (v.exec(""), y = v.exec(rt), y && (rt = y[3], s.push(y[1]), y[2])) {
                g = y[3];
                break
            }
            while (y);
            if (s.length > 1 && it.exec(t)) if (s.length === 2 && u.relative[s[0]]) a = p(s[0] + s[1], i, o);
            else for (a = u.relative[s[0]] ? [i] : n(s.shift(), i); s.length;) t = s.shift(),
            u.relative[t] && (t += s.shift()),
            a = p(t, a, o);
            else if (!o && s.length > 1 && i.nodeType === 9 && !k && u.match.ID.test(s[0]) && !u.match.ID.test(s[s.length - 1]) && (l = n.find(s.shift(), i, k), i = l.expr ? n.filter(l.expr, l.set)[0] : l.set[0]), i) for (l = o ? {
                expr: s.pop(),
                set: f(o)
            }: n.find(s.pop(), s.length === 1 && (s[0] === "~" || s[0] === "+") && i.parentNode ? i.parentNode: i, k), a = l.expr ? n.filter(l.expr, l.set) : l.set, s.length > 0 ? h = f(a) : tt = !1; s.length;) w = s.pop(),
            b = w,
            u.relative[w] ? b = s.pop() : w = "",
            b == null && (b = i),
            u.relative[w](h, b, k);
            else h = s = [];
            if (h || (h = a), h || n.error(w || t), d.call(h) === "[object Array]") if (tt) if (i && i.nodeType === 1) for (c = 0; h[c] != null; c++) h[c] && (h[c] === !0 || h[c].nodeType === 1 && n.contains(i, h[c])) && e.push(a[c]);
            else for (c = 0; h[c] != null; c++) h[c] && h[c].nodeType === 1 && e.push(a[c]);
            else e.push.apply(e, h);
            else f(h, e);
            return g && (n(g, nt, e, o), n.uniqueSort(e)),
            e
        },
        n.uniqueSort = function(n) {
            if (l && (a = k, n.sort(l), a)) for (var t = 1; t < n.length; t++) n[t] === n[t - 1] && n.splice(t--, 1);
            return n
        },
        n.matches = function(t, i) {
            return n(t, null, null, i)
        },
        n.matchesSelector = function(t, i) {
            return n(i, null, null, [t]).length > 0
        },
        n.find = function(n, t, i) {
            var f,
            e,
            c,
            r,
            s,
            h;
            if (!n) return [];
            for (e = 0, c = u.order.length; e < c; e++) if (s = u.order[e], (r = u.leftMatch[s].exec(n)) && (h = r[1], r.splice(1, 1), h.substr(h.length - 1) !== "\\" && (r[1] = (r[1] || "").replace(o, ""), f = u.find[s](r, t, i), f != null))) {
                n = n.replace(u.match[s], "");
                break
            }
            return f || (f = typeof t.getElementsByTagName != "undefined" ? t.getElementsByTagName("*") : []),
            {
                set: f,
                expr: n
            }
        },
        n.filter = function(i, r, f, e) {
            for (var o, h, c, l, y, k, w, v, p, b = i, a = [], s = r, d = r && r[0] && n.isXML(r[0]); i && r.length;) {
                for (c in u.filter) if ((o = u.leftMatch[c].exec(i)) != null && o[2]) {
                    if (k = u.filter[c], w = o[1], h = !1, o.splice(1, 1), w.substr(w.length - 1) === "\\") continue;
                    if (s === a && (a = []), u.preFilter[c]) if (o = u.preFilter[c](o, s, f, a, e, d), o) {
                        if (o === !0) continue
                    } else h = l = !0;
                    if (o) for (v = 0; (y = s[v]) != null; v++) y && (l = k(y, o, v, s), p = e ^ l, f && l != null ? p ? h = !0: s[v] = !1: p && (a.push(y), h = !0));
                    if (l !== t) {
                        if (f || (s = a), i = i.replace(u.match[c], ""), !h) return [];
                        break
                    }
                }
                if (i === b) if (h == null) n.error(i);
                else break;
                b = i
            }
            return s
        },
        n.error = function(n) {
            throw "Syntax error, unrecognized expression: " + n;
        };
        var w = n.getText = function(n) {
            var i,
            r,
            t = n.nodeType,
            u = "";
            if (t) {
                if (t === 1) {
                    if (typeof n.textContent == "string") return n.textContent;
                    if (typeof n.innerText == "string") return n.innerText.replace(tt, "");
                    for (n = n.firstChild; n; n = n.nextSibling) u += w(n)
                } else if (t === 3 || t === 4) return n.nodeValue
            } else for (i = 0; r = n[i]; i++) r.nodeType !== 8 && (u += w(r));
            return u
        },
        u = n.selectors = {
            order: ["ID", "NAME", "TAG"],
            match: {
                ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
                CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
                NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
                ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
                TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
                CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
                POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
                PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
            },
            leftMatch: {},
            attrMap: {
                "class": "className",
                "for": "htmlFor"
            },
            attrHandle: {
                href: function(n) {
                    return n.getAttribute("href")
                },
                type: function(n) {
                    return n.getAttribute("type")
                }
            },
            relative: {
                "+": function(t, i) {
                    var f = typeof i == "string",
                    e = f && !c.test(i),
                    o = f && !e,
                    u,
                    s,
                    r;
                    for (e && (i = i.toLowerCase()), u = 0, s = t.length; u < s; u++) if (r = t[u]) {
                        while ((r = r.previousSibling) && r.nodeType !== 1);
                        t[u] = o || r && r.nodeName.toLowerCase() === i ? r || !1: r === i
                    }
                    o && n.filter(i, t, !0)
                },
                ">": function(t, i) {
                    var u,
                    f = typeof i == "string",
                    r = 0,
                    o = t.length,
                    e;
                    if (f && !c.test(i)) for (i = i.toLowerCase(); r < o; r++) u = t[r],
                    u && (e = u.parentNode, t[r] = e.nodeName.toLowerCase() === i ? e: !1);
                    else {
                        for (; r < o; r++) u = t[r],
                        u && (t[r] = f ? u.parentNode: u.parentNode === i);
                        f && n.filter(i, t, !0)
                    }
                },
                "": function(n, t, i) {
                    var r,
                    f = y++,
                    u = b;
                    typeof t == "string" && !c.test(t) && (t = t.toLowerCase(), r = t, u = g),
                    u("parentNode", t, f, n, r, i)
                },
                "~": function(n, t, i) {
                    var r,
                    f = y++,
                    u = b;
                    typeof t == "string" && !c.test(t) && (t = t.toLowerCase(), r = t, u = g),
                    u("previousSibling", t, f, n, r, i)
                }
            },
            find: {
                ID: function(n, t, i) {
                    if (typeof t.getElementById != "undefined" && !i) {
                        var r = t.getElementById(n[1]);
                        return r && r.parentNode ? [r] : []
                    }
                },
                NAME: function(n, t) {
                    var r,
                    u,
                    i,
                    f;
                    if (typeof t.getElementsByName != "undefined") {
                        for (r = [], u = t.getElementsByName(n[1]), i = 0, f = u.length; i < f; i++) u[i].getAttribute("name") === n[1] && r.push(u[i]);
                        return r.length === 0 ? null: r
                    }
                },
                TAG: function(n, t) {
                    if (typeof t.getElementsByTagName != "undefined") return t.getElementsByTagName(n[1])
                }
            },
            preFilter: {
                CLASS: function(n, t, i, r, u, f) {
                    if (n = " " + n[1].replace(o, "") + " ", f) return n;
                    for (var s = 0, e; (e = t[s]) != null; s++) e && (u ^ (e.className && (" " + e.className + " ").replace(/[\t\n\r]/g, " ").indexOf(n) >= 0) ? i || r.push(e) : i && (t[s] = !1));
                    return ! 1
                },
                ID: function(n) {
                    return n[1].replace(o, "")
                },
                TAG: function(n) {
                    return n[1].replace(o, "").toLowerCase()
                },
                CHILD: function(t) {
                    if (t[1] === "nth") {
                        t[2] || n.error(t[0]),
                        t[2] = t[2].replace(/^\+|\s*/g, "");
                        var i = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(t[2] === "even" && "2n" || t[2] === "odd" && "2n+1" || !/\D/.test(t[2]) && "0n+" + t[2] || t[2]);
                        t[2] = i[1] + (i[2] || 1) - 0,
                        t[3] = i[3] - 0
                    } else t[2] && n.error(t[0]);
                    return t[0] = y++,
                    t
                },
                ATTR: function(n, t, i, r, f, e) {
                    var s = n[1] = n[1].replace(o, "");
                    return ! e && u.attrMap[s] && (n[1] = u.attrMap[s]),
                    n[4] = (n[4] || n[5] || "").replace(o, ""),
                    n[2] === "~=" && (n[4] = " " + n[4] + " "),
                    n
                },
                PSEUDO: function(t, i, r, f, e) {
                    if (t[1] === "not") if ((v.exec(t[3]) || "").length > 1 || /^\w/.test(t[3])) t[3] = n(t[3], null, null, i);
                    else {
                        var o = n.filter(t[3], i, r, !0 ^ e);
                        return r || f.push.apply(f, o),
                        !1
                    } else if (u.match.POS.test(t[0]) || u.match.CHILD.test(t[0])) return ! 0;
                    return t
                },
                POS: function(n) {
                    return n.unshift(!0),
                    n
                }
            },
            filters: {
                enabled: function(n) {
                    return n.disabled === !1 && n.type !== "hidden"
                },
                disabled: function(n) {
                    return n.disabled === !0
                },
                checked: function(n) {
                    return n.checked === !0
                },
                selected: function(n) {
                    return n.parentNode && n.parentNode.selectedIndex,
                    n.selected === !0
                },
                parent: function(n) {
                    return !! n.firstChild
                },
                empty: function(n) {
                    return ! n.firstChild
                },
                has: function(t, i, r) {
                    return !! n(r[3], t).length
                },
                header: function(n) {
                    return /h\d/i.test(n.nodeName)
                },
                text: function(n) {
                    var t = n.getAttribute("type"),
                    i = n.type;
                    return n.nodeName.toLowerCase() === "input" && "text" === i && (t === i || t === null)
                },
                radio: function(n) {
                    return n.nodeName.toLowerCase() === "input" && "radio" === n.type
                },
                checkbox: function(n) {
                    return n.nodeName.toLowerCase() === "input" && "checkbox" === n.type
                },
                file: function(n) {
                    return n.nodeName.toLowerCase() === "input" && "file" === n.type
                },
                password: function(n) {
                    return n.nodeName.toLowerCase() === "input" && "password" === n.type
                },
                submit: function(n) {
                    var t = n.nodeName.toLowerCase();
                    return (t === "input" || t === "button") && "submit" === n.type
                },
                image: function(n) {
                    return n.nodeName.toLowerCase() === "input" && "image" === n.type
                },
                reset: function(n) {
                    var t = n.nodeName.toLowerCase();
                    return (t === "input" || t === "button") && "reset" === n.type
                },
                button: function(n) {
                    var t = n.nodeName.toLowerCase();
                    return t === "input" && "button" === n.type || t === "button"
                },
                input: function(n) {
                    return /input|select|textarea|button/i.test(n.nodeName)
                },
                focus: function(n) {
                    return n === n.ownerDocument.activeElement
                }
            },
            setFilters: {
                first: function(n, t) {
                    return t === 0
                },
                last: function(n, t, i, r) {
                    return t === r.length - 1
                },
                even: function(n, t) {
                    return t % 2 == 0
                },
                odd: function(n, t) {
                    return t % 2 == 1
                },
                lt: function(n, t, i) {
                    return t < i[3] - 0
                },
                gt: function(n, t, i) {
                    return t > i[3] - 0
                },
                nth: function(n, t, i) {
                    return i[3] - 0 === t
                },
                eq: function(n, t, i) {
                    return i[3] - 0 === t
                }
            },
            filter: {
                PSEUDO: function(t, i, r, f) {
                    var e = i[1],
                    h = u.filters[e],
                    s,
                    o,
                    c;
                    if (h) return h(t, r, i, f);
                    if (e === "contains") return (t.textContent || t.innerText || w([t]) || "").indexOf(i[3]) >= 0;
                    if (e === "not") {
                        for (s = i[3], o = 0, c = s.length; o < c; o++) if (s[o] === t) return ! 1;
                        return ! 0
                    }
                    n.error(e)
                },
                CHILD: function(n, t) {
                    var r,
                    o,
                    s,
                    u,
                    l,
                    h,
                    f,
                    c = t[1],
                    i = n;
                    switch (c) {
                    case "only":
                    case "first":
                        while (i = i.previousSibling) if (i.nodeType === 1) return ! 1;
                        if (c === "first") return ! 0;
                        i = n;
                    case "last":
                        while (i = i.nextSibling) if (i.nodeType === 1) return ! 1;
                        return ! 0;
                    case "nth":
                        if (r = t[2], o = t[3], r === 1 && o === 0) return ! 0;
                        if (s = t[0], u = n.parentNode, u && (u[e] !== s || !n.nodeIndex)) {
                            for (h = 0, i = u.firstChild; i; i = i.nextSibling) i.nodeType === 1 && (i.nodeIndex = ++h);
                            u[e] = s
                        }
                        return f = n.nodeIndex - o,
                        r === 0 ? f === 0: f % r == 0 && f / r >= 0
                    }
                },
                ID: function(n, t) {
                    return n.nodeType === 1 && n.getAttribute("id") === t
                },
                TAG: function(n, t) {
                    return t === "*" && n.nodeType === 1 || !!n.nodeName && n.nodeName.toLowerCase() === t
                },
                CLASS: function(n, t) {
                    return (" " + (n.className || n.getAttribute("class")) + " ").indexOf(t) > -1
                },
                ATTR: function(t, i) {
                    var o = i[1],
                    s = n.attr ? n.attr(t, o) : u.attrHandle[o] ? u.attrHandle[o](t) : t[o] != null ? t[o] : t.getAttribute(o),
                    f = s + "",
                    e = i[2],
                    r = i[4];
                    return s == null ? e === "!=": !e && n.attr ? s != null: e === "=" ? f === r: e === "*=" ? f.indexOf(r) >= 0: e === "~=" ? (" " + f + " ").indexOf(r) >= 0: r ? e === "!=" ? f !== r: e === "^=" ? f.indexOf(r) === 0: e === "$=" ? f.substr(f.length - r.length) === r: e === "|=" ? f === r || f.substr(0, r.length + 1) === r + "-": !1: f && s !== !1
                },
                POS: function(n, t, i, r) {
                    var e = t[2],
                    f = u.setFilters[e];
                    if (f) return f(n, i, t, r)
                }
            }
        },
        it = u.match.POS,
        nt = function(n, t) {
            return "\\" + ( + t + 1)
        };
        for (h in u.match) u.match[h] = new RegExp(u.match[h].source + /(?![^\[]*\])(?![^\(]*\))/.source),
        u.leftMatch[h] = new RegExp(/(^(?:.|\r|\n)*?)/.source + u.match[h].source.replace(/\\(\d+)/g, nt));
        f = function(n, t) {
            return (n = Array.prototype.slice.call(n, 0), t) ? (t.push.apply(t, n), t) : n
        };
        try {
            Array.prototype.slice.call(r.documentElement.childNodes, 0)[0].nodeType
        } catch(rt) {
            f = function(n, t) {
                var i = 0,
                r = t || [],
                u;
                if (d.call(n) === "[object Array]") Array.prototype.push.apply(r, n);
                else if (typeof n.length == "number") for (u = n.length; i < u; i++) r.push(n[i]);
                else for (; n[i]; i++) r.push(n[i]);
                return r
            }
        }
        r.documentElement.compareDocumentPosition ? l = function(n, t) {
            return n === t ? (a = !0, 0) : !n.compareDocumentPosition || !t.compareDocumentPosition ? n.compareDocumentPosition ? -1: 1: n.compareDocumentPosition(t) & 4 ? -1: 1
        }: (l = function(n, t) {
            var i;
            if (n === t) return a = !0,
            0;
            if (n.sourceIndex && t.sourceIndex) return n.sourceIndex - t.sourceIndex;
            var e,
            c,
            u = [],
            f = [],
            o = n.parentNode,
            h = t.parentNode,
            r = o;
            if (o === h) return s(n, t);
            if (!o) return - 1;
            if (!h) return 1;
            while (r) u.unshift(r),
            r = r.parentNode;
            for (r = h; r;) f.unshift(r),
            r = r.parentNode;

            for (e = u.length, c = f.length, i = 0; i < e && i < c; i++) if (u[i] !== f[i]) return s(u[i], f[i]);
            return i === e ? s(n, f[i], -1) : s(u[i], t, 1)
        },
        s = function(n, t, i) {
            if (n === t) return i;
            for (var r = n.nextSibling; r;) {
                if (r === t) return - 1;
                r = r.nextSibling
            }
            return 1
        }),
        function() {
            var n = r.createElement("div"),
            f = "script" + +new Date,
            i = r.documentElement;
            n.innerHTML = "<a name='" + f + "'/>",
            i.insertBefore(n, i.firstChild),
            r.getElementById(f) && (u.find.ID = function(n, i, r) {
                if (typeof i.getElementById != "undefined" && !r) {
                    var u = i.getElementById(n[1]);
                    return u ? u.id === n[1] || typeof u.getAttributeNode != "undefined" && u.getAttributeNode("id").nodeValue === n[1] ? [u] : t: []
                }
            },
            u.filter.ID = function(n, t) {
                var i = typeof n.getAttributeNode != "undefined" && n.getAttributeNode("id");
                return n.nodeType === 1 && i && i.nodeValue === t
            }),
            i.removeChild(n),
            i = n = null
        } (),
        function() {
            var n = r.createElement("div");
            n.appendChild(r.createComment("")),
            n.getElementsByTagName("*").length > 0 && (u.find.TAG = function(n, t) {
                var i = t.getElementsByTagName(n[1]),
                u,
                r;
                if (n[1] === "*") {
                    for (u = [], r = 0; i[r]; r++) i[r].nodeType === 1 && u.push(i[r]);
                    i = u
                }
                return i
            }),
            n.innerHTML = "<a href='#'></a>",
            n.firstChild && typeof n.firstChild.getAttribute != "undefined" && n.firstChild.getAttribute("href") !== "#" && (u.attrHandle.href = function(n) {
                return n.getAttribute("href", 2)
            }),
            n = null
        } (),
        r.querySelectorAll && 
        function() {
            var i = n,
            t = r.createElement("div"),
            o = "__sizzle__",
            e;
            if (t.innerHTML = "<p class='TEST'></p>", !t.querySelectorAll || t.querySelectorAll(".TEST").length !== 0) {
                n = function(t, e, s, h) {
                    var c,
                    l;
                    if (e = e || r, !h && !n.isXML(e)) {
                        if (c = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(t), c && (e.nodeType === 1 || e.nodeType === 9)) {
                            if (c[1]) return f(e.getElementsByTagName(t), s);
                            if (c[2] && u.find.CLASS && e.getElementsByClassName) return f(e.getElementsByClassName(c[2]), s)
                        }
                        if (e.nodeType === 9) {
                            if (t === "body" && e.body) return f([e.body], s);
                            if (c && c[3]) {
                                if (l = e.getElementById(c[3]), !l || !l.parentNode) return f([], s);
                                if (l.id === c[3]) return f([l], s)
                            }
                            try {
                                return f(e.querySelectorAll(t), s)
                            } catch(b) {}
                        } else if (e.nodeType === 1 && e.nodeName.toLowerCase() !== "object") {
                            var w = e,
                            v = e.getAttribute("id"),
                            a = v || o,
                            y = e.parentNode,
                            p = /^\s*[+~]/.test(t);
                            v ? a = a.replace(/'/g, "\\$&") : e.setAttribute("id", a),
                            p && y && (e = e.parentNode);
                            try {
                                if (!p || y) return f(e.querySelectorAll("[id='" + a + "'] " + t), s)
                            } catch(k) {} finally {
                                v || w.removeAttribute("id")
                            }
                        }
                    }
                    return i(t, e, s, h)
                };
                for (e in i) n[e] = i[e];
                t = null
            }
        } (),
        function() {
            var t = r.documentElement,
            i = t.matchesSelector || t.mozMatchesSelector || t.webkitMatchesSelector || t.msMatchesSelector,
            e,
            f;
            if (i) {
                e = !i.call(r.createElement("div"), "div"),
                f = !1;
                try {
                    i.call(r.documentElement, "[test!='']:sizzle")
                } catch(o) {
                    f = !0
                }
                n.matchesSelector = function(t, r) {
                    if (r = r.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"), !n.isXML(t)) try {
                        if (f || !u.match.PSEUDO.test(r) && !/!=/.test(r)) {
                            var o = i.call(t, r);
                            if (o || !e || t.document && t.document.nodeType !== 11) return o
                        }
                    } catch(s) {}
                    return n(r, null, null, [t]).length > 0
                }
            }
        } (),
        function() {
            var n = r.createElement("div");
            if (n.innerHTML = "<div class='test e'></div><div class='test'></div>", !!n.getElementsByClassName && n.getElementsByClassName("e").length !== 0) {
                if (n.lastChild.className = "e", n.getElementsByClassName("e").length === 1) return;
                u.order.splice(1, 0, "CLASS"),
                u.find.CLASS = function(n, t, i) {
                    if (typeof t.getElementsByClassName != "undefined" && !i) return t.getElementsByClassName(n[1])
                },
                n = null
            }
        } (),
        n.contains = r.documentElement.contains ? 
        function(n, t) {
            return n !== t && (n.contains ? n.contains(t) : !0)
        }: r.documentElement.compareDocumentPosition ? 
        function(n, t) {
            return !! (n.compareDocumentPosition(t) & 16)
        }: function() {
            return ! 1
        },
        n.isXML = function(n) {
            var t = (n ? n.ownerDocument || n: 0).documentElement;
            return t ? t.nodeName !== "HTML": !1
        },
        p = function(t, i, r) {
            for (var e, o = [], s = "", h = i.nodeType ? [i] : i, f, c; e = u.match.PSEUDO.exec(t);) s += e[0],
            t = t.replace(u.match.PSEUDO, "");
            for (t = u.relative[t] ? t + "*": t, f = 0, c = h.length; f < c; f++) n(t, h[f], o, r);
            return n.filter(s, o)
        },
        n.attr = i.attr,
        n.selectors.attrMap = {},
        i.find = n,
        i.expr = n.selectors,
        i.expr[":"] = i.expr.filters,
        i.unique = n.uniqueSort,
        i.text = n.getText,
        i.isXMLDoc = n.isXML,
        i.contains = n.contains
    } ();
    var re = /Until$/,
    ie = /^(?:parents|prevUntil|prevAll)/,
    te = /,/,
    su = /^.[^:#\[\.,]*$/,
    ne = Array.prototype.slice,
    ui = i.expr.match.POS,
    gf = {
        children: !0,
        contents: !0,
        next: !0,
        prev: !0
    };
    i.fn.extend({
        find: function(n) {
            var s = this,
            t,
            f,
            r,
            o,
            u,
            e;
            if (typeof n != "string") return i(n).filter(function() {
                for (t = 0, f = s.length; t < f; t++) if (i.contains(s[t], this)) return ! 0
            });
            for (r = this.pushStack("", "find", n), t = 0, f = this.length; t < f; t++) if (o = r.length, i.find(n, this[t], r), t > 0) for (u = o; u < r.length; u++) for (e = 0; e < o; e++) if (r[e] === r[u]) {
                r.splice(u--, 1);
                break
            }
            return r
        },
        has: function(n) {
            var t = i(n);
            return this.filter(function() {
                for (var n = 0, r = t.length; n < r; n++) if (i.contains(this, t[n])) return ! 0
            })
        },
        not: function(n) {
            return this.pushStack(ar(this, n, !1), "not", n)
        },
        filter: function(n) {
            return this.pushStack(ar(this, n, !0), "filter", n)
        },
        is: function(n) {
            return !! n && (typeof n == "string" ? ui.test(n) ? i(n, this.context).index(this[0]) >= 0: i.filter(n, this).length > 0: this.filter(n).length > 0)
        },
        closest: function(n, t) {
            var f = [],
            u,
            s,
            r = this[0],
            e,
            o;
            if (i.isArray(n)) {
                for (e = 1; r && r.ownerDocument && r !== t;) {
                    for (u = 0; u < n.length; u++) i(r).is(n[u]) && f.push({
                        selector: n[u],
                        elem: r,
                        level: e
                    });
                    r = r.parentNode,
                    e++
                }
                return f
            }
            for (o = ui.test(n) || typeof n != "string" ? i(n, t || this.context) : 0, u = 0, s = this.length; u < s; u++) for (r = this[u]; r;) {
                if (o ? o.index(r) > -1: i.find.matchesSelector(r, n)) {
                    f.push(r);
                    break
                }
                if (r = r.parentNode, !r || !r.ownerDocument || r === t || r.nodeType === 11) break
            }
            return f = f.length > 1 ? i.unique(f) : f,
            this.pushStack(f, "closest", n)
        },
        index: function(n) {
            return n ? typeof n == "string" ? i.inArray(this[0], i(n)) : i.inArray(n.jquery ? n[0] : n, this) : this[0] && this[0].parentNode ? this.prevAll().length: -1
        },
        add: function(n, t) {
            var u = typeof n == "string" ? i(n, t) : i.makeArray(n && n.nodeType ? [n] : n),
            r = i.merge(this.get(), u);
            return this.pushStack(vi(u[0]) || vi(r[0]) ? r: i.unique(r))
        },
        andSelf: function() {
            return this.add(this.prevObject)
        }
    }),
    i.each({
        parent: function(n) {
            var t = n.parentNode;
            return t && t.nodeType !== 11 ? t: null
        },
        parents: function(n) {
            return i.dir(n, "parentNode")
        },
        parentsUntil: function(n, t, r) {
            return i.dir(n, "parentNode", r)
        },
        next: function(n) {
            return i.nth(n, 2, "nextSibling")
        },
        prev: function(n) {
            return i.nth(n, 2, "previousSibling")
        },
        nextAll: function(n) {
            return i.dir(n, "nextSibling")
        },
        prevAll: function(n) {
            return i.dir(n, "previousSibling")
        },
        nextUntil: function(n, t, r) {
            return i.dir(n, "nextSibling", r)
        },
        prevUntil: function(n, t, r) {
            return i.dir(n, "previousSibling", r)
        },
        siblings: function(n) {
            return i.sibling(n.parentNode.firstChild, n)
        },
        children: function(n) {
            return i.sibling(n.firstChild)
        },
        contents: function(n) {
            return i.nodeName(n, "iframe") ? n.contentDocument || n.contentWindow.document: i.makeArray(n.childNodes)
        }
    },
    function(n, t) {
        i.fn[n] = function(r, u) {
            var f = i.map(this, t, r),
            e = ne.call(arguments);
            return re.test(n) || (u = r),
            u && typeof u == "string" && (f = i.filter(u, f)),
            f = this.length > 1 && !gf[n] ? i.unique(f) : f,
            (this.length > 1 || te.test(u)) && ie.test(n) && (f = f.reverse()),
            this.pushStack(f, n, e.join(","))
        }
    }),
    i.extend({
        filter: function(n, t, r) {
            return r && (n = ":not(" + n + ")"),
            t.length === 1 ? i.find.matchesSelector(t[0], n) ? [t[0]] : [] : i.find.matches(n, t)
        },
        dir: function(n, r, u) {
            for (var e = [], f = n[r]; f && f.nodeType !== 9 && (u === t || f.nodeType !== 1 || !i(f).is(u));) f.nodeType === 1 && e.push(f),
            f = f[r];
            return e
        },
        nth: function(n, t, i) {
            t = t || 1;
            for (var u = 0; n; n = n[i]) if (n.nodeType === 1 && ++u === t) break;
            return n
        },
        sibling: function(n, t) {
            for (var i = []; n; n = n.nextSibling) n.nodeType === 1 && n !== t && i.push(n);
            return i
        }
    });
    var si = "abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",
    ue = / jQuery\d+="(?:\d+|null)"/g,
    et = /^\s+/,
    dt = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
    lt = /<([\w:]+)/,
    df = /<tbody/i,
    bf = /<|&#?\w+;/,
    wf = /<(?:script|style)/i,
    pf = /<(?:script|object|embed|option|style)/i,
    yf = new RegExp("<(?:" + si.replace(" ", "|") + ")", "i"),
    fi = /checked\s*(?:[^=]|=\s*.checked.)/i,
    vf = /\/(java|ecma)script/i,
    af = /^\s*<!(?:\[CDATA\[|\-\-)/,
    u = {
        option: [1, "<select multiple='multiple'>", "</select>"],
        legend: [1, "<fieldset>", "</fieldset>"],
        thead: [1, "<table>", "</table>"],
        tr: [2, "<table><tbody>", "</tbody></table>"],
        td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
        col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
        area: [1, "<map>", "</map>"],
        _default: [0, "", ""]
    },
    lf = tr(r);
    u.optgroup = u.option,
    u.tbody = u.tfoot = u.colgroup = u.caption = u.thead,
    u.th = u.td,
    i.support.htmlSerialize || (u._default = [1, "div<div>", "</div>"]),
    i.fn.extend({
        text: function(n) {
            return i.isFunction(n) ? this.each(function(t) {
                var r = i(this);
                r.text(n.call(this, t, r.text()))
            }) : typeof n != "object" && n !== t ? this.empty().append((this[0] && this[0].ownerDocument || r).createTextNode(n)) : i.text(this)
        },
        wrapAll: function(n) {
            if (i.isFunction(n)) return this.each(function(t) {
                i(this).wrapAll(n.call(this, t))
            });
            if (this[0]) {
                var t = i(n, this[0].ownerDocument).eq(0).clone(!0);
                this[0].parentNode && t.insertBefore(this[0]),
                t.map(function() {
                    for (var n = this; n.firstChild && n.firstChild.nodeType === 1;) n = n.firstChild;
                    return n
                }).append(this)
            }
            return this
        },
        wrapInner: function(n) {
            return i.isFunction(n) ? this.each(function(t) {
                i(this).wrapInner(n.call(this, t))
            }) : this.each(function() {
                var t = i(this),
                r = t.contents();
                r.length ? r.wrapAll(n) : t.append(n)
            })
        },
        wrap: function(n) {
            return this.each(function() {
                i(this).wrapAll(n)
            })
        },
        unwrap: function() {
            return this.parent().each(function() {
                i.nodeName(this, "body") || i(this).replaceWith(this.childNodes)
            }).end()
        },
        append: function() {
            return this.domManip(arguments, !0, 
            function(n) {
                this.nodeType === 1 && this.appendChild(n)
            })
        },
        prepend: function() {
            return this.domManip(arguments, !0, 
            function(n) {
                this.nodeType === 1 && this.insertBefore(n, this.firstChild)
            })
        },
        before: function() {
            if (this[0] && this[0].parentNode) return this.domManip(arguments, !1, 
            function(n) {
                this.parentNode.insertBefore(n, this)
            });
            if (arguments.length) {
                var n = i(arguments[0]);
                return n.push.apply(n, this.toArray()),
                this.pushStack(n, "before", arguments)
            }
        },
        after: function() {
            if (this[0] && this[0].parentNode) return this.domManip(arguments, !1, 
            function(n) {
                this.parentNode.insertBefore(n, this.nextSibling)
            });
            if (arguments.length) {
                var n = this.pushStack(this, "after", arguments);
                return n.push.apply(n, i(arguments[0]).toArray()),
                n
            }
        },
        remove: function(n, t) {
            for (var u = 0, r; (r = this[u]) != null; u++)(!n || i.filter(n, [r]).length) && (!t && r.nodeType === 1 && (i.cleanData(r.getElementsByTagName("*")), i.cleanData([r])), r.parentNode && r.parentNode.removeChild(r));
            return this
        },
        empty: function() {
            for (var t = 0, n; (n = this[t]) != null; t++) for (n.nodeType === 1 && i.cleanData(n.getElementsByTagName("*")); n.firstChild;) n.removeChild(n.firstChild);
            return this
        },
        clone: function(n, t) {
            return n = n == null ? !1: n,
            t = t == null ? n: t,
            this.map(function() {
                return i.clone(this, n, t)
            })
        },
        html: function(n) {
            if (n === t) return this[0] && this[0].nodeType === 1 ? this[0].innerHTML.replace(ue, "") : null;
            if (typeof n != "string" || wf.test(n) || !i.support.leadingWhitespace && et.test(n) || u[(lt.exec(n) || ["", ""])[1].toLowerCase()]) i.isFunction(n) ? this.each(function(t) {
                var r = i(this);
                r.html(n.call(this, t, r.html()))
            }) : this.empty().append(n);
            else {
                n = n.replace(dt, "<$1></$2>");
                try {
                    for (var r = 0, f = this.length; r < f; r++) this[r].nodeType === 1 && (i.cleanData(this[r].getElementsByTagName("*")), this[r].innerHTML = n)
                } catch(e) {
                    this.empty().append(n)
                }
            }
            return this
        },
        replaceWith: function(n) {
            return this[0] && this[0].parentNode ? i.isFunction(n) ? this.each(function(t) {
                var r = i(this),
                u = r.html();
                r.replaceWith(n.call(this, t, u))
            }) : (typeof n != "string" && (n = i(n).detach()), this.each(function() {
                var t = this.nextSibling,
                r = this.parentNode;
                i(this).remove(),
                t ? i(t).before(n) : i(r).append(n)
            })) : this.length ? this.pushStack(i(i.isFunction(n) ? n() : n), "replaceWith", n) : this
        },
        detach: function(n) {
            return this.remove(n, !0)
        },
        domManip: function(n, r, u) {
            var c,
            o,
            f,
            s,
            e = n[0],
            l = [];
            if (!i.support.checkClone && arguments.length === 3 && typeof e == "string" && fi.test(e)) return this.each(function() {
                i(this).domManip(n, r, u, !0)
            });
            if (i.isFunction(e)) return this.each(function(f) {
                var o = i(this);
                n[0] = e.call(this, f, r ? o.html() : t),
                o.domManip(n, r, u)
            });
            if (this[0]) {
                if (s = e && e.parentNode, c = i.support.parentNode && s && s.nodeType === 11 && s.childNodes.length === this.length ? {
                    fragment: s
                }: i.buildFragment(n, this, l), f = c.fragment, o = f.childNodes.length === 1 ? f = f.firstChild: f.firstChild, o) {
                    r = r && i.nodeName(o, "tr");
                    for (var h = 0, a = this.length, v = a - 1; h < a; h++) u.call(r ? du(this[h], o) : this[h], c.cacheable || a > 1 && h < v ? i.clone(f, !0, !0) : f)
                }
                l.length && i.each(l, gu)
            }
            return this
        }
    }),
    i.buildFragment = function(n, t, u) {
        var e,
        h,
        s,
        o,
        f = n[0];
        return t && t[0] && (o = t[0].ownerDocument || t[0]),
        o.createDocumentFragment || (o = r),
        n.length === 1 && typeof f == "string" && f.length < 512 && o === r && f.charAt(0) === "<" && !pf.test(f) && (i.support.checkClone || !fi.test(f)) && !i.support.unknownElems && yf.test(f) && (h = !0, s = i.fragments[f], s && s !== 1 && (e = s)),
        e || (e = o.createDocumentFragment(), i.clean(n, o, e, u)),
        h && (i.fragments[f] = s ? e: 1),
        {
            fragment: e,
            cacheable: h
        }
    },
    i.fragments = {},
    i.each({
        appendTo: "append",
        prependTo: "prepend",
        insertBefore: "before",
        insertAfter: "after",
        replaceAll: "replaceWith"
    },
    function(n, t) {
        i.fn[n] = function(r) {
            var e = [],
            u = i(r),
            o = this.length === 1 && this[0].parentNode,
            f,
            h,
            s;
            if (o && o.nodeType === 11 && o.childNodes.length === 1 && u.length === 1) return u[t](this[0]),
            this;
            for (f = 0, h = u.length; f < h; f++) s = (f > 0 ? this.clone(!0) : this).get(),
            i(u[f])[t](s),
            e = e.concat(s);
            return this.pushStack(e, n, u.selector)
        }
    }),
    i.extend({
        clone: function(n, t, r) {
            var o = n.cloneNode(!0),
            f,
            e,
            u;
            if ((!i.support.noCloneEvent || !i.support.noCloneChecked) && (n.nodeType === 1 || n.nodeType === 11) && !i.isXMLDoc(n)) for (gi(n, o), f = k(n), e = k(o), u = 0; f[u]; ++u) e[u] && gi(f[u], e[u]);
            if (t && (ki(n, o), r)) for (f = k(n), e = k(o), u = 0; f[u]; ++u) ki(f[u], e[u]);
            return f = e = null,
            o
        },
        clean: function(n, t, f, e) {
            var b,
            s,
            c,
            h,
            o,
            y,
            a,
            p,
            k;
            for (t = t || r, typeof t.createElement == "undefined" && (t = t.ownerDocument || t[0] && t[0].ownerDocument || r), s = [], h = 0; (o = n[h]) != null; h++) if (typeof o == "number" && (o += ""), o) {
                if (typeof o == "string") if (bf.test(o)) {
                    o = o.replace(dt, "<$1></$2>");
                    var w = (lt.exec(o) || ["", ""])[1].toLowerCase(),
                    v = u[w] || u._default,
                    d = v[0],
                    l = t.createElement("div");
                    for (t === r ? lf.appendChild(l) : tr(t).appendChild(l), l.innerHTML = v[1] + o + v[2]; d--;) l = l.lastChild;
                    if (!i.support.tbody) for (y = df.test(o), a = w === "table" && !y ? l.firstChild && l.firstChild.childNodes: v[1] === "<table>" && !y ? l.childNodes: [], c = a.length - 1; c >= 0; --c) i.nodeName(a[c], "tbody") && !a[c].childNodes.length && a[c].parentNode.removeChild(a[c]); ! i.support.leadingWhitespace && et.test(o) && l.insertBefore(t.createTextNode(et.exec(o)[0]), l.firstChild),
                    o = l.childNodes
                } else o = t.createTextNode(o);
                if (!i.support.appendChecked) if (o[0] && typeof(p = o.length) == "number") for (c = 0; c < p; c++) rr(o[c]);
                else rr(o);
                o.nodeType ? s.push(o) : s = i.merge(s, o)
            }
            if (f) for (b = function(n) {
                return ! n.type || vf.test(n.type)
            },
            h = 0; s[h]; h++) e && i.nodeName(s[h], "script") && (!s[h].type || s[h].type.toLowerCase() === "text/javascript") ? e.push(s[h].parentNode ? s[h].parentNode.removeChild(s[h]) : s[h]) : (s[h].nodeType === 1 && (k = i.grep(s[h].getElementsByTagName("script"), b), s.splice.apply(s, [h + 1, 0].concat(k))), f.appendChild(s[h]));
            return s
        },
        cleanData: function(n) {
            for (var r, u, o = i.cache, s = i.event.special, h = i.support.deleteExpando, t, f, e = 0; (t = n[e]) != null; e++) if ((!t.nodeName || !i.noData[t.nodeName.toLowerCase()]) && (u = t[i.expando], u)) {
                if (r = o[u], r && r.events) {
                    for (f in r.events) s[f] ? i.event.remove(t, f) : i.removeEvent(t, f, r.handle);
                    r.handle && (r.handle.elem = null)
                }
                h ? delete t[i.expando] : t.removeAttribute && t.removeAttribute(i.expando),
                delete o[u]
            }
        }
    });
    var ct = /alpha\([^)]*\)/i,
    cf = /opacity=([^)]*)/,
    hf = /([A-Z]|^ms)/g,
    yt = /^-?\d+(?:px)?$/i,
    hu = /^-?\d/,
    ff = /^([\-+])=([\-+.\de]+)/,
    ou = {
        position: "absolute",
        visibility: "hidden",
        display: "block"
    },
    fu = ["Left", "Right"],
    vr = ["Top", "Bottom"],
    h,
    gt,
    ri;
    i.fn.css = function(n, r) {
        return arguments.length === 2 && r === t ? this: i.access(this, n, r, !0, 
        function(n, r, u) {
            return u !== t ? i.style(n, r, u) : i.css(n, r)
        })
    },
    i.extend({
        cssHooks: {
            opacity: {
                get: function(n, t) {
                    if (t) {
                        var i = h(n, "opacity", "opacity");
                        return i === "" ? "1": i
                    }
                    return n.style.opacity
                }
            }
        },
        cssNumber: {
            fillOpacity: !0,
            fontWeight: !0,
            lineHeight: !0,
            opacity: !0,
            orphans: !0,
            widows: !0,
            zIndex: !0,
            zoom: !0
        },
        cssProps: {
            float: i.support.cssFloat ? "cssFloat": "styleFloat"
        },
        style: function(n, r, u, f) {
            if ( !! n && n.nodeType !== 3 && n.nodeType !== 8 && !!n.style) {
                var o,
                s,
                h = i.camelCase(r),
                c = n.style,
                e = i.cssHooks[h];
                if (r = i.cssProps[h] || h, u === t) return e && "get" in e && (o = e.get(n, !1, f)) !== t ? o: c[r];
                if (s = typeof u, s === "string" && (o = ff.exec(u)) && (u = +(o[1] + 1) * +o[2] + parseFloat(i.css(n, r)), s = "number"), u == null || s === "number" && isNaN(u)) return;
                if (s === "number" && !i.cssNumber[h] && (u += "px"), !e || !("set" in e) || (u = e.set(n, u)) !== t) try {
                    c[r] = u
                } catch(l) {}
            }
        },
        css: function(n, r, u) {
            var e,
            f;
            return (r = i.camelCase(r), f = i.cssHooks[r], r = i.cssProps[r] || r, r === "cssFloat" && (r = "float"), f && "get" in f && (e = f.get(n, !0, u)) !== t) ? e: h ? h(n, r) : void 0
        },
        swap: function(n, t, i) {
            var u = {},
            r;
            for (r in t) u[r] = n.style[r],
            n.style[r] = t[r];
            i.call(n);
            for (r in t) n.style[r] = u[r]
        }
    }),
    i.curCSS = i.css,
    i.each(["height", "width"], 
    function(n, t) {
        i.cssHooks[t] = {
            get: function(n, r, u) {
                var f;
                if (r) return n.offsetWidth !== 0 ? ci(n, t, u) : (i.swap(n, ou, 
                function() {
                    f = ci(n, t, u)
                }), f)
            },
            set: function(n, t) {
                return yt.test(t) ? (t = parseFloat(t), t >= 0 ? t + "px": void 0) : t
            }
        }
    }),
    i.support.opacity || (i.cssHooks.opacity = {
        get: function(n, t) {
            return cf.test((t && n.currentStyle ? n.currentStyle.filter: n.style.filter) || "") ? parseFloat(RegExp.$1) / 100 + "": t ? "1": ""
        },
        set: function(n, t) {
            var r = n.style,
            u = n.currentStyle,
            e = i.isNumeric(t) ? "alpha(opacity=" + t * 100 + ")": "",
            f = u && u.filter || r.filter || ""; (r.zoom = 1, t >= 1 && i.trim(f.replace(ct, "")) === "" && (r.removeAttribute("filter"), u && !u.filter)) || (r.filter = ct.test(f) ? f.replace(ct, e) : f + " " + e)
        }
    }),
    i(function() {
        i.support.reliableMarginRight || (i.cssHooks.marginRight = {
            get: function(n, t) {
                var r;
                return i.swap(n, {
                    display: "inline-block"
                },
                function() {
                    r = t ? h(n, "margin-right", "marginRight") : n.style.marginRight
                }),
                r
            }
        })
    }),
    r.defaultView && r.defaultView.getComputedStyle && (gt = function(n, r) {
        var u,
        f,
        e;
        return (r = r.replace(hf, "-$1").toLowerCase(), !(f = n.ownerDocument.defaultView)) ? t: ((e = f.getComputedStyle(n, null)) && (u = e.getPropertyValue(r), u === "" && !i.contains(n.ownerDocument.documentElement, n) && (u = i.style(n, r))), u)
    }),
    r.documentElement.currentStyle && (ri = function(n, t) {
        var f,
        u,
        e,
        i = n.currentStyle && n.currentStyle[t],
        r = n.style;
        return i === null && r && (e = r[t]) && (i = e),
        !yt.test(i) && hu.test(i) && (f = r.left, u = n.runtimeStyle && n.runtimeStyle.left, u && (n.runtimeStyle.left = n.currentStyle.left), r.left = t === "fontSize" ? "1em": i || 0, i = r.pixelLeft + "px", r.left = f, u && (n.runtimeStyle.left = u)),
        i === "" ? "auto": i
    }),
    h = gt || ri,
    i.expr && i.expr.filters && (i.expr.filters.hidden = function(n) {
        var t = n.offsetWidth,
        r = n.offsetHeight;
        return t === 0 && r === 0 || !i.support.reliableHiddenOffsets && (n.style && n.style.display || i.css(n, "display")) === "none"
    },
    i.expr.filters.visible = function(n) {
        return ! i.expr.filters.hidden(n)
    });
    var wr = /%20/g,
    eu = /\[\]$/,
    oi = /\r?\n/g,
    kr = /#.*$/,
    dr = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg,
    gr = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
    br = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
    nu = /^(?:GET|HEAD)$/,
    tu = /^\/\//,
    ti = /\?/,
    iu = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
    ru = /^(?:select|textarea)/i,
    hi = /\s+/,
    uu = /([?&])_=[^&]*/,
    kt = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
    bt = i.fn.load,
    it = {},
    wt = {},
    o,
    s,
    li = ["*/"] + ["*"];
    try {
        o = wu.href
    } catch(he) {
        o = r.createElement("a"),
        o.href = "",
        o = o.href
    }
    s = kt.exec(o.toLowerCase()) || [],
    i.fn.extend({
        load: function(n, r, u) {
            var f,
            e,
            o,
            s;
            return typeof n != "string" && bt ? bt.apply(this, arguments) : this.length ? (f = n.indexOf(" "), f >= 0 && (e = n.slice(f, n.length), n = n.slice(0, f)), o = "GET", r && (i.isFunction(r) ? (u = r, r = t) : typeof r == "object" && (r = i.param(r, i.ajaxSettings.traditional), o = "POST")), s = this, i.ajax({
                url: n,
                type: o,
                dataType: "html",
                data: r,
                complete: function(n, t, r) {
                    r = n.responseText,
                    n.isResolved() && (n.done(function(n) {
                        r = n
                    }), s.html(e ? i("<div>").append(r.replace(iu, "")).find(e) : r)),
                    u && s.each(u, [r, t, n])
                }
            }), this) : this
        },
        serialize: function() {
            return i.param(this.serializeArray())
        },
        serializeArray: function() {
            return this.map(function() {
                return this.elements ? i.makeArray(this.elements) : this
            }).filter(function() {
                return this.name && !this.disabled && (this.checked || ru.test(this.nodeName) || gr.test(this.type))
            }).map(function(n, t) {
                var r = i(this).val();
                return r == null ? null: i.isArray(r) ? i.map(r, 
                function(n) {
                    return {
                        name: t.name,
                        value: n.replace(oi, "\r\n")
                    }
                }) : {
                    name: t.name,
                    value: r.replace(oi, "\r\n")
                }
            }).get()
        }
    }),
    i.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), 
    function(n, t) {
        i.fn[t] = function(n) {
            return this.bind(t, n)
        }
    }),
    i.each(["get", "post"], 
    function(n, r) {
        i[r] = function(n, u, f, e) {
            return i.isFunction(u) && (e = e || f, f = u, u = t),
            i.ajax({
                type: r,
                url: n,
                data: u,
                success: f,
                dataType: e
            })
        }
    }),
    i.extend({
        getScript: function(n, r) {
            return i.get(n, t, r, "script")
        },
        getJSON: function(n, t, r) {
            return i.get(n, t, r, "json")
        },
        ajaxSetup: function(n, t) {
            return t ? bi(n, i.ajaxSettings) : (t = n, n = i.ajaxSettings),
            bi(n, t),
            n
        },
        ajaxSettings: {
            url: o,
            isLocal: br.test(s[1]),
            global: !0,
            type: "GET",
            contentType: "application/x-www-form-urlencoded",
            processData: !0,
            async: !0,
            accepts: {
                xml: "application/xml, text/xml",
                html: "text/html",
                text: "text/plain",
                json: "application/json, text/javascript",
                "*": li
            },
            contents: {
                xml: /xml/,
                html: /html/,
                json: /json/
            },
            responseFields: {
                xml: "responseXML",
                text: "responseText"
            },
            converters: {
                "* text": n.String,
                "text html": !0,
                "text json": i.parseJSON,
                "text xml": i.parseXML
            },
            flatOptions: {
                context: !0,
                url: !0
            }
        },
        ajaxPrefilter: ei(it),
        ajaxTransport: ei(wt),
        ajax: function(n, r) {
            function w(n, r, s, l) {
                if (e !== 2) {
                    e = 2,
                    nt && clearTimeout(nt),
                    c = t,
                    g = l || "",
                    f.readyState = n > 0 ? 4: 0;
                    var p,
                    k,
                    w,
                    a = r,
                    it = s ? nf(u, f, s) : t,
                    d,
                    tt;
                    if (n >= 200 && n < 300 || n === 304) if (u.ifModified && ((d = f.getResponseHeader("Last-Modified")) && (i.lastModified[o] = d), (tt = f.getResponseHeader("Etag")) && (i.etag[o] = tt)), n === 304) a = "notmodified",
                    p = !0;
                    else try {
                        k = tf(u, it),
                        a = "success",
                        p = !0
                    } catch(ut) {
                        a = "parsererror",
                        w = ut
                    } else w = a,
                    (!a || n) && (a = "error", n < 0 && (n = 0));
                    f.status = n,
                    f.statusText = "" + (r || a),
                    p ? b.resolveWith(h, [k, a, f]) : b.rejectWith(h, [f, a, w]),
                    f.statusCode(y),
                    y = t,
                    v && rt.trigger("ajax" + (p ? "Success": "Error"), [f, u, p ? k: w]),
                    ft.fireWith(h, [f, a]),
                    v && (rt.trigger("ajaxComplete", [f, u]), --i.active || i.event.trigger("ajaxStop"))
                }
            }
            var k,
            d;
            typeof n == "object" && (r = n, n = t),
            r = r || {};
            var u = i.ajaxSetup({},
            r),
            h = u.context || u,
            rt = h !== u && (h.nodeType || h instanceof i) ? i(h) : i.event,
            b = i.Deferred(),
            ft = i.Callbacks("once memory"),
            y = u.statusCode || {},
            o,
            et = {},
            ut = {},
            g,
            p,
            c,
            nt,
            l,
            e = 0,
            v,
            a,
            f = {
                readyState: 0,
                setRequestHeader: function(n, t) {
                    if (!e) {
                        var i = n.toLowerCase();
                        n = ut[i] = ut[i] || n,
                        et[n] = t
                    }
                    return this
                },
                getAllResponseHeaders: function() {
                    return e === 2 ? g: null
                },
                getResponseHeader: function(n) {
                    var i;
                    if (e === 2) {
                        if (!p) for (p = {}; i = dr.exec(g);) p[i[1].toLowerCase()] = i[2];
                        i = p[n.toLowerCase()]
                    }
                    return i === t ? null: i
                },
                overrideMimeType: function(n) {
                    return e || (u.mimeType = n),
                    this
                },
                abort: function(n) {
                    return n = n || "abort",
                    c && c.abort(n),
                    w(0, n),
                    this
                }
            };
            if (b.promise(f), f.success = f.done, f.error = f.fail, f.complete = ft.add, f.statusCode = function(n) {
                if (n) {
                    var t;
                    if (e < 2) for (t in n) y[t] = [y[t], n[t]];
                    else t = n[f.status],
                    f.then(t, t)
                }
                return this
            },
            u.url = ((n || u.url) + "").replace(kr, "").replace(tu, s[1] + "//"), u.dataTypes = i.trim(u.dataType || "*").toLowerCase().split(hi), u.crossDomain == null && (l = kt.exec(u.url.toLowerCase()), u.crossDomain = !(!l || l[1] == s[1] && l[2] == s[2] && (l[3] || (l[1] === "http:" ? 80: 443)) == (s[3] || (s[1] === "http:" ? 80: 443)))), u.data && u.processData && typeof u.data != "string" && (u.data = i.param(u.data, u.traditional)), tt(it, u, r, f), e === 2) return ! 1;
            v = u.global,
            u.type = u.type.toUpperCase(),
            u.hasContent = !nu.test(u.type),
            v && i.active++==0 && i.event.trigger("ajaxStart"),
            u.hasContent || (u.data && (u.url += (ti.test(u.url) ? "&": "?") + u.data, delete u.data), o = u.url, u.cache === !1 && (k = i.now(), d = u.url.replace(uu, "$1_=" + k), u.url = d + (d === u.url ? (ti.test(u.url) ? "&": "?") + "_=" + k: ""))),
            (u.data && u.hasContent && u.contentType !== !1 || r.contentType) && f.setRequestHeader("Content-Type", u.contentType),
            u.ifModified && (o = o || u.url, i.lastModified[o] && f.setRequestHeader("If-Modified-Since", i.lastModified[o]), i.etag[o] && f.setRequestHeader("If-None-Match", i.etag[o])),
            f.setRequestHeader("Accept", u.dataTypes[0] && u.accepts[u.dataTypes[0]] ? u.accepts[u.dataTypes[0]] + (u.dataTypes[0] !== "*" ? ", " + li + "; q=0.01": "") : u.accepts["*"]);
            for (a in u.headers) f.setRequestHeader(a, u.headers[a]);
            if (u.beforeSend && (u.beforeSend.call(h, f, u) === !1 || e === 2)) return f.abort(),
            !1;
            for (a in {
                success: 1,
                error: 1,
                complete: 1
            }) f[a](u[a]);
            if (c = tt(wt, u, r, f), c) {
                f.readyState = 1,
                v && rt.trigger("ajaxSend", [f, u]),
                u.async && u.timeout > 0 && (nt = setTimeout(function() {
                    f.abort("timeout")
                },
                u.timeout));
                try {
                    e = 1,
                    c.send(et, w)
                } catch(ot) {
                    e < 2 ? w( - 1, ot) : i.error(ot)
                }
            } else w( - 1, "No Transport");
            return f
        },
        param: function(n, r) {
            var u = [],
            e = function(n, t) {
                t = i.isFunction(t) ? t() : t,
                u[u.length] = encodeURIComponent(n) + "=" + encodeURIComponent(t)
            },
            f;
            if (r === t && (r = i.ajaxSettings.traditional), i.isArray(n) || n.jquery && !i.isPlainObject(n)) i.each(n, 
            function() {
                e(this.name, this.value)
            });
            else for (f in n) ft(f, n[f], r, e);
            return u.join("&").replace(wr, "+")
        }
    }),
    i.extend({
        active: 0,
        lastModified: {},
        etag: {}
    }),
    wi = i.now(),
    y = /(\=)\?(&|$)|\?\?/i,
    i.ajaxSetup({
        jsonp: "callback",
        jsonpCallback: function() {
            return i.expando + "_" + wi++
        }
    }),
    i.ajaxPrefilter("json jsonp", 
    function(t, r, u) {
        var h = t.contentType === "application/x-www-form-urlencoded" && typeof t.data == "string";
        if (t.dataTypes[0] === "jsonp" || t.jsonp !== !1 && (y.test(t.url) || h && y.test(t.data))) {
            var o,
            f = t.jsonpCallback = i.isFunction(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback,
            c = n[f],
            e = t.url,
            s = t.data,
            l = "$1" + f + "$2";
            return t.jsonp !== !1 && (e = e.replace(y, l), t.url === e && (h && (s = s.replace(y, l)), t.data === s && (e += (/\?/.test(e) ? "&": "?") + t.jsonp + "=" + f))),
            t.url = e,
            t.data = s,
            n[f] = function(n) {
                o = [n]
            },
            u.always(function() {
                n[f] = c,
                o && i.isFunction(c) && n[f](o[0])
            }),
            t.converters["script json"] = function() {
                return o || i.error(f + " was not called"),
                o[0]
            },
            t.dataTypes[0] = "json",
            "script"
        }
    }),
    i.ajaxSetup({
        accepts: {
            script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
        },
        contents: {
            script: /javascript|ecmascript/
        },
        converters: {
            "text script": function(n) {
                return i.globalEval(n),
                n
            }
        }
    }),
    i.ajaxPrefilter("script", 
    function(n) {
        n.cache === t && (n.cache = !1),
        n.crossDomain && (n.type = "GET", n.global = !1)
    }),
    i.ajaxTransport("script", 
    function(n) {
        if (n.crossDomain) {
            var i,
            u = r.head || r.getElementsByTagName("head")[0] || r.documentElement;
            return {
                send: function(f, e) {
                    i = r.createElement("script"),
                    i.async = "async",
                    n.scriptCharset && (i.charset = n.scriptCharset),
                    i.src = n.url,
                    i.onload = i.onreadystatechange = function(n, r) { (r || !i.readyState || /loaded|complete/.test(i.readyState)) && (i.onload = i.onreadystatechange = null, u && i.parentNode && u.removeChild(i), i = t, r || e(200, "success"))
                    },
                    u.insertBefore(i, u.firstChild)
                },
                abort: function() {
                    i && i.onload(0, 1)
                }
            }
        }
    }),
    b = n.ActiveXObject ? 
    function() {
        for (var n in l) l[n](0, 1)
    }: !1,
    or = 0,
    i.ajaxSettings.xhr = n.ActiveXObject ? 
    function() {
        return ! this.isLocal && er() || rf()
    }: er,
    function(n) {
        i.extend(i.support, {
            ajax: !!n,
            cors: !!n && "withCredentials" in n
        })
    } (i.ajaxSettings.xhr()),
    i.support.ajax && i.ajaxTransport(function(r) {
        if (!r.crossDomain || i.support.cors) {
            var u;
            return {
                send: function(f, e) {
                    var o = r.xhr(),
                    h,
                    s;
                    if (r.username ? o.open(r.type, r.url, r.async, r.username, r.password) : o.open(r.type, r.url, r.async), r.xhrFields) for (s in r.xhrFields) o[s] = r.xhrFields[s];
                    r.mimeType && o.overrideMimeType && o.overrideMimeType(r.mimeType),
                    !r.crossDomain && !f["X-Requested-With"] && (f["X-Requested-With"] = "XMLHttpRequest");
                    try {
                        for (s in f) o.setRequestHeader(s, f[s])
                    } catch(c) {}
                    o.send(r.hasContent && r.data || null),
                    u = function(n, f) {
                        var s,
                        v,
                        y,
                        c,
                        a;
                        try {
                            if (u && (f || o.readyState === 4)) if (u = t, h && (o.onreadystatechange = i.noop, b && delete l[h]), f) o.readyState !== 4 && o.abort();
                            else {
                                s = o.status,
                                y = o.getAllResponseHeaders(),
                                c = {},
                                a = o.responseXML,
                                a && a.documentElement && (c.xml = a),
                                c.text = o.responseText;
                                try {
                                    v = o.statusText
                                } catch(p) {
                                    v = ""
                                } ! s && r.isLocal && !r.crossDomain ? s = c.text ? 200: 404: s === 1223 && (s = 204)
                            }
                        } catch(w) {
                            f || e( - 1, w)
                        }
                        c && e(s, v, c, y)
                    },
                    !r.async || o.readyState === 4 ? u() : (h = ++or, b && (l || (l = {},
                    i(n).unload(b)), l[h] = u), o.onreadystatechange = u)
                },
                abort: function() {
                    u && u(0, 1)
                }
            }
        }
    });
    var ut = {},
    f,
    a,
    pr = /^(?:toggle|show|hide)$/,
    yr = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
    p,
    di = [["height", "marginTop", "marginBottom", "paddingTop", "paddingBottom"], ["width", "marginLeft", "marginRight", "paddingLeft", "paddingRight"], ["opacity"]],
    w;
    i.fn.extend({
        show: function(n, t, r) {
            var u,
            e,
            f,
            o;
            if (n || n === 0) return this.animate(c("show", 3), n, t, r);
            for (f = 0, o = this.length; f < o; f++) u = this[f],
            u.style && (e = u.style.display, !i._data(u, "olddisplay") && e === "none" && (e = u.style.display = ""), e === "" && i.css(u, "display") === "none" && i._data(u, "olddisplay", ii(u.nodeName)));
            for (f = 0; f < o; f++) u = this[f],
            u.style && (e = u.style.display, (e === "" || e === "none") && (u.style.display = i._data(u, "olddisplay") || ""));
            return this
        },
        hide: function(n, t, r) {
            if (n || n === 0) return this.animate(c("hide", 3), n, t, r);
            for (var f, e, u = 0, o = this.length; u < o; u++) f = this[u],
            f.style && (e = i.css(f, "display"), e !== "none" && !i._data(f, "olddisplay") && i._data(f, "olddisplay", e));
            for (u = 0; u < o; u++) this[u].style && (this[u].style.display = "none");
            return this
        },
        _toggle: i.fn.toggle,
        toggle: function(n, t, r) {
            var u = typeof n == "boolean";
            return i.isFunction(n) && i.isFunction(t) ? this._toggle.apply(this, arguments) : n == null || u ? this.each(function() {
                var t = u ? n: i(this).is(":hidden");
                i(this)[t ? "show": "hide"]()
            }) : this.animate(c("toggle", 3), n, t, r),
            this
        },
        fadeTo: function(n, t, i, r) {
            return this.filter(":hidden").css("opacity", 0).show().end().animate({
                opacity: t
            },
            n, i, r)
        },
        animate: function(n, t, r, u) {
            function e() {
                f.queue === !1 && i._mark(this);
                var u = i.extend({},
                f),
                y = this.nodeType === 1,
                v = y && i(this).is(":hidden"),
                e,
                t,
                r,
                o,
                h,
                s,
                c,
                l,
                a;
                u.animatedProperties = {};
                for (r in n) {
                    if (e = i.camelCase(r), r !== e && (n[e] = n[r], delete n[r]), t = n[e], i.isArray(t) ? (u.animatedProperties[e] = t[1], t = n[e] = t[0]) : u.animatedProperties[e] = u.specialEasing && u.specialEasing[e] || u.easing || "swing", t === "hide" && v || t === "show" && !v) return u.complete.call(this);
                    y && (e === "height" || e === "width") && (u.overflow = [this.style.overflow, this.style.overflowX, this.style.overflowY], i.css(this, "display") === "inline" && i.css(this, "float") === "none" && (!i.support.inlineBlockNeedsLayout || ii(this.nodeName) === "inline" ? this.style.display = "inline-block": this.style.zoom = 1))
                }
                u.overflow != null && (this.style.overflow = "hidden");
                for (r in n) o = new i.fx(this, u, r),
                t = n[r],
                pr.test(t) ? (a = i._data(this, "toggle" + r) || (t === "toggle" ? v ? "show": "hide": 0), a ? (i._data(this, "toggle" + r, a === "show" ? "hide": "show"), o[a]()) : o[t]()) : (h = yr.exec(t), s = o.cur(), h ? (c = parseFloat(h[2]), l = h[3] || (i.cssNumber[r] ? "": "px"), l !== "px" && (i.style(this, r, (c || 1) + l), s = (c || 1) / o.cur() * s, i.style(this, r, s + l)), h[1] && (c = (h[1] === "-=" ? -1: 1) * c + s), o.custom(s, c, l)) : o.custom(s, t, ""));
                return ! 0
            }
            var f = i.speed(t, r, u);
            return i.isEmptyObject(n) ? this.each(f.complete, [!1]) : (n = i.extend({},
            n), f.queue === !1 ? this.each(e) : this.queue(f.queue, e))
        },
        stop: function(n, r, u) {
            return typeof n != "string" && (u = r, r = n, n = t),
            r && n !== !1 && this.queue(n || "fx", []),
            this.each(function() {
                function e(n, t, r) {
                    var f = t[r];
                    i.removeData(n, r, !0),
                    f.stop(u)
                }
                var t,
                o = !1,
                r = i.timers,
                f = i._data(this);
                if (u || i._unmark(!0, this), n == null) for (t in f) f[t].stop && t.indexOf(".run") === t.length - 4 && e(this, f, t);
                else f[t = n + ".run"] && f[t].stop && e(this, f, t);
                for (t = r.length; t--;) r[t].elem === this && (n == null || r[t].queue === n) && (u ? r[t](!0) : r[t].saveState(), o = !0, r.splice(t, 1)); (!u || !o) && i.dequeue(this, n)
            })
        }
    }),
    i.each({
        slideDown: c("show", 1),
        slideUp: c("hide", 1),
        slideToggle: c("toggle", 1),
        fadeIn: {
            opacity: "show"
        },
        fadeOut: {
            opacity: "hide"
        },
        fadeToggle: {
            opacity: "toggle"
        }
    },
    function(n, t) {
        i.fn[n] = function(n, i, r) {
            return this.animate(t, n, i, r)
        }
    }),
    i.extend({
        speed: function(n, t, r) {
            var u = n && typeof n == "object" ? i.extend({},
            n) : {
                complete: r || !r && t || i.isFunction(n) && n,
                duration: n,
                easing: r && t || t && !i.isFunction(t) && t
            };
            return u.duration = i.fx.off ? 0: typeof u.duration == "number" ? u.duration: u.duration in i.fx.speeds ? i.fx.speeds[u.duration] : i.fx.speeds._default,
            (u.queue == null || u.queue === !0) && (u.queue = "fx"),
            u.old = u.complete,
            u.complete = function(n) {
                i.isFunction(u.old) && u.old.call(this),
                u.queue ? i.dequeue(this, u.queue) : n !== !1 && i._unmark(this)
            },
            u
        },
        easing: {
            linear: function(n, t, i, r) {
                return i + r * n
            },
            swing: function(n, t, i, r) {
                return ( - Math.cos(n * Math.PI) / 2 + .5) * r + i
            }
        },
        timers: [],
        fx: function(n, t, i) {
            this.options = t,
            this.elem = n,
            this.prop = i,
            t.orig = t.orig || {}
        }
    }),
    i.fx.prototype = {
        update: function() {
            this.options.step && this.options.step.call(this.elem, this.now, this),
            (i.fx.step[this.prop] || i.fx.step._default)(this)
        },
        cur: function() {
            if (this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null)) return this.elem[this.prop];
            var t,
            n = i.css(this.elem, this.prop);
            return isNaN(t = parseFloat(n)) ? !n || n === "auto" ? 0: n: t
        },
        custom: function(n, r, u) {
            function e(n) {
                return f.step(n)
            }
            var f = this,
            o = i.fx;
            this.startTime = w || at(),
            this.end = r,
            this.now = this.start = n,
            this.pos = this.state = 0,
            this.unit = u || this.unit || (i.cssNumber[this.prop] ? "": "px"),
            e.queue = this.options.queue,
            e.elem = this.elem,
            e.saveState = function() {
                f.options.hide && i._data(f.elem, "fxshow" + f.prop) === t && i._data(f.elem, "fxshow" + f.prop, f.start)
            },
            e() && i.timers.push(e) && !p && (p = setInterval(o.tick, o.interval))
        },
        show: function() {
            var n = i._data(this.elem, "fxshow" + this.prop);
            this.options.orig[this.prop] = n || i.style(this.elem, this.prop),
            this.options.show = !0,
            n !== t ? this.custom(this.cur(), n) : this.custom(this.prop === "width" || this.prop === "height" ? 1: 0, this.cur()),
            i(this.elem).show()
        },
        hide: function() {
            this.options.orig[this.prop] = i._data(this.elem, "fxshow" + this.prop) || i.style(this.elem, this.prop),
            this.options.hide = !0,
            this.custom(this.cur(), 0)
        },
        step: function(n) {
            var r,
            f,
            e,
            o = w || at(),
            s = !0,
            u = this.elem,
            t = this.options;
            if (n || o >= t.duration + this.startTime) {
                this.now = this.end,
                this.pos = this.state = 1,
                this.update(),
                t.animatedProperties[this.prop] = !0;
                for (r in t.animatedProperties) t.animatedProperties[r] !== !0 && (s = !1);
                if (s) {
                    if (t.overflow != null && !i.support.shrinkWrapBlocks && i.each(["", "X", "Y"], 
                    function(n, i) {
                        u.style["overflow" + i] = t.overflow[n]
                    }), t.hide && i(u).hide(), t.hide || t.show) for (r in t.animatedProperties) i.style(u, r, t.orig[r]),
                    i.removeData(u, "fxshow" + r, !0),
                    i.removeData(u, "toggle" + r, !0);
                    e = t.complete,
                    e && (t.complete = !1, e.call(u))
                }
                return ! 1
            }
            return t.duration == Infinity ? this.now = o: (f = o - this.startTime, this.state = f / t.duration, this.pos = i.easing[t.animatedProperties[this.prop]](this.state, f, 0, 1, t.duration), this.now = this.start + (this.end - this.start) * this.pos),
            this.update(),
            !0
        }
    },
    i.extend(i.fx, {
        tick: function() {
            for (var r, n = i.timers, t = 0; t < n.length; t++) r = n[t],
            !r() && n[t] === r && n.splice(t--, 1);
            n.length || i.fx.stop()
        },
        interval: 13,
        stop: function() {
            clearInterval(p),
            p = null
        },
        speeds: {
            slow: 600,
            fast: 200,
            _default: 400
        },
        step: {
            opacity: function(n) {
                i.style(n.elem, "opacity", n.now)
            },
            _default: function(n) {
                n.elem.style && n.elem.style[n.prop] != null ? n.elem.style[n.prop] = n.now + n.unit: n.elem[n.prop] = n.now
            }
        }
    }),
    i.each(["width", "height"], 
    function(n, t) {
        i.fx.step[t] = function(n) {
            i.style(n.elem, t, Math.max(0, n.now))
        }
    }),
    i.expr && i.expr.filters && (i.expr.filters.animated = function(n) {
        return i.grep(i.timers, 
        function(t) {
            return n === t.elem
        }).length
    }),
    vt = /^t(?:able|d|h)$/i,
    rt = /^(?:body|html)$/i,
    i.fn.offset = "getBoundingClientRect" in r.documentElement ? 
    function(n) {
        var t = this[0],
        r,
        f,
        u;
        if (n) return this.each(function(t) {
            i.offset.setOffset(this, n, t)
        });
        if (!t || !t.ownerDocument) return null;
        if (t === t.ownerDocument.body) return i.offset.bodyOffset(t);
        try {
            r = t.getBoundingClientRect()
        } catch(y) {}
        if (f = t.ownerDocument, u = f.documentElement, !r || !i.contains(u, t)) return r ? {
            top: r.top,
            left: r.left
        }: {
            top: 0,
            left: 0
        };
        var e = f.body,
        o = ht(f),
        s = u.clientTop || e.clientTop || 0,
        h = u.clientLeft || e.clientLeft || 0,
        c = o.pageYOffset || i.support.boxModel && u.scrollTop || e.scrollTop,
        l = o.pageXOffset || i.support.boxModel && u.scrollLeft || e.scrollLeft,
        a = r.top + c - s,
        v = r.left + l - h;
        return {
            top: a,
            left: v
        }
    }: function(n) {
        var t = this[0];
        if (n) return this.each(function(t) {
            i.offset.setOffset(this, n, t)
        });
        if (!t || !t.ownerDocument) return null;
        if (t === t.ownerDocument.body) return i.offset.bodyOffset(t);
        for (var r, h = t.offsetParent, a = t, c = t.ownerDocument, l = c.documentElement, e = c.body, s = c.defaultView, o = s ? s.getComputedStyle(t, null) : t.currentStyle, u = t.offsetTop, f = t.offsetLeft; (t = t.parentNode) && t !== e && t !== l;) {
            if (i.support.fixedPosition && o.position === "fixed") break;
            r = s ? s.getComputedStyle(t, null) : t.currentStyle,
            u -= t.scrollTop,
            f -= t.scrollLeft,
            t === h && (u += t.offsetTop, f += t.offsetLeft, i.support.doesNotAddBorder && (!i.support.doesAddBorderForTableAndCells || !vt.test(t.nodeName)) && (u += parseFloat(r.borderTopWidth) || 0, f += parseFloat(r.borderLeftWidth) || 0), a = h, h = t.offsetParent),
            i.support.subtractsBorderForOverflowNotVisible && r.overflow !== "visible" && (u += parseFloat(r.borderTopWidth) || 0, f += parseFloat(r.borderLeftWidth) || 0),
            o = r
        }
        return (o.position === "relative" || o.position === "static") && (u += e.offsetTop, f += e.offsetLeft),
        i.support.fixedPosition && o.position === "fixed" && (u += Math.max(l.scrollTop, e.scrollTop), f += Math.max(l.scrollLeft, e.scrollLeft)),
        {
            top: u,
            left: f
        }
    },
    i.offset = {
        bodyOffset: function(n) {
            var t = n.offsetTop,
            r = n.offsetLeft;
            return i.support.doesNotIncludeMarginInBodyOffset && (t += parseFloat(i.css(n, "marginTop")) || 0, r += parseFloat(i.css(n, "marginLeft")) || 0),
            {
                top: t,
                left: r
            }
        },
        setOffset: function(n, t, r) {
            var f = i.css(n, "position");
            f === "static" && (n.style.position = "relative");
            var e = i(n),
            o = e.offset(),
            l = i.css(n, "top"),
            a = i.css(n, "left"),
            v = (f === "absolute" || f === "fixed") && i.inArray("auto", [l, a]) > -1,
            u = {},
            s = {},
            h,
            c;
            v ? (s = e.position(), h = s.top, c = s.left) : (h = parseFloat(l) || 0, c = parseFloat(a) || 0),
            i.isFunction(t) && (t = t.call(n, r, o)),
            t.top != null && (u.top = t.top - o.top + h),
            t.left != null && (u.left = t.left - o.left + c),
            "using" in t ? t.using.call(n, u) : e.css(u)
        }
    },
    i.fn.extend({
        position: function() {
            if (!this[0]) return null;
            var u = this[0],
            n = this.offsetParent(),
            t = this.offset(),
            r = rt.test(n[0].nodeName) ? {
                top: 0,
                left: 0
            }: n.offset();
            return t.top -= parseFloat(i.css(u, "marginTop")) || 0,
            t.left -= parseFloat(i.css(u, "marginLeft")) || 0,
            r.top += parseFloat(i.css(n[0], "borderTopWidth")) || 0,
            r.left += parseFloat(i.css(n[0], "borderLeftWidth")) || 0,
            {
                top: t.top - r.top,
                left: t.left - r.left
            }
        },
        offsetParent: function() {
            return this.map(function() {
                for (var n = this.offsetParent || r.body; n && !rt.test(n.nodeName) && i.css(n, "position") === "static";) n = n.offsetParent;
                return n
            })
        }
    }),
    i.each(["Left", "Top"], 
    function(n, r) {
        var u = "scroll" + r;
        i.fn[u] = function(r) {
            var e,
            f;
            return r === t ? (e = this[0], !e) ? null: (f = ht(e), f ? "pageXOffset" in f ? f[n ? "pageYOffset": "pageXOffset"] : i.support.boxModel && f.document.documentElement[u] || f.document.body[u] : e[u]) : this.each(function() {
                f = ht(this),
                f ? f.scrollTo(n ? i(f).scrollLeft() : r, n ? r: i(f).scrollTop()) : this[u] = r
            })
        }
    }),
    i.each(["Height", "Width"], 
    function(n, r) {
        var u = r.toLowerCase();
        i.fn["inner" + r] = function() {
            var n = this[0];
            return n ? n.style ? parseFloat(i.css(n, u, "padding")) : this[u]() : null
        },
        i.fn["outer" + r] = function(n) {
            var t = this[0];
            return t ? t.style ? parseFloat(i.css(t, u, n ? "margin": "border")) : this[u]() : null
        },
        i.fn[u] = function(n) {
            var f = this[0],
            e,
            o,
            s,
            h;
            return f ? i.isFunction(n) ? this.each(function(t) {
                var r = i(this);
                r[u](n.call(this, t, r[u]()))
            }) : i.isWindow(f) ? (e = f.document.documentElement["client" + r], o = f.document.body, f.document.compatMode === "CSS1Compat" && e || o && o["client" + r] || e) : f.nodeType === 9 ? Math.max(f.documentElement["client" + r], f.body["scroll" + r], f.documentElement["scroll" + r], f.body["offset" + r], f.documentElement["offset" + r]) : n === t ? (s = i.css(f, u), h = parseFloat(s), i.isNumeric(h) ? h: s) : this.css(u, typeof n == "string" ? n: n + "px") : n == null ? null: this
        }
    }),
    n.jQuery = n.$ = i
})(window),
function(n, t) {
    function i(t) {
        return ! n(t).parents().andSelf().filter(function() {
            return n.curCSS(this, "visibility") === "hidden" || n.expr.filters.hidden(this)
        }).length
    }
    function r(t, r) {
        var u = t.nodeName.toLowerCase(),
        f,
        e,
        o;
        return "area" === u ? (f = t.parentNode, e = f.name, !t.href || !e || f.nodeName.toLowerCase() !== "map") ? !1: (o = n("img[usemap=#" + e + "]")[0], !!o && i(o)) : (/input|select|textarea|button|object/.test(u) ? !t.disabled: "a" == u ? t.href || r: r) && i(t)
    }
    n.ui = n.ui || {},
    n.ui.version || (n.extend(n.ui, {
        version: "1.8.18",
        keyCode: {
            ALT: 18,
            BACKSPACE: 8,
            CAPS_LOCK: 20,
            COMMA: 188,
            COMMAND: 91,
            COMMAND_LEFT: 91,
            COMMAND_RIGHT: 93,
            CONTROL: 17,
            DELETE: 46,
            DOWN: 40,
            END: 35,
            ENTER: 13,
            ESCAPE: 27,
            HOME: 36,
            INSERT: 45,
            LEFT: 37,
            MENU: 93,
            NUMPAD_ADD: 107,
            NUMPAD_DECIMAL: 110,
            NUMPAD_DIVIDE: 111,
            NUMPAD_ENTER: 108,
            NUMPAD_MULTIPLY: 106,
            NUMPAD_SUBTRACT: 109,
            PAGE_DOWN: 34,
            PAGE_UP: 33,
            PERIOD: 190,
            RIGHT: 39,
            SHIFT: 16,
            SPACE: 32,
            TAB: 9,
            UP: 38,
            WINDOWS: 91
        }
    }), n.fn.extend({
        propAttr: n.fn.prop || n.fn.attr,
        _focus: n.fn.focus,
        focus: function(t, i) {
            return typeof t == "number" ? this.each(function() {
                var r = this;
                setTimeout(function() {
                    n(r).focus(),
                    i && i.call(r)
                },
                t)
            }) : this._focus.apply(this, arguments)
        },
        scrollParent: function() {
            var t;
            return t = n.browser.msie && /(static|relative)/.test(this.css("position")) || /absolute/.test(this.css("position")) ? this.parents().filter(function() {
                return /(relative|absolute|fixed)/.test(n.curCSS(this, "position", 1)) && /(auto|scroll)/.test(n.curCSS(this, "overflow", 1) + n.curCSS(this, "overflow-y", 1) + n.curCSS(this, "overflow-x", 1))
            }).eq(0) : this.parents().filter(function() {
                return /(auto|scroll)/.test(n.curCSS(this, "overflow", 1) + n.curCSS(this, "overflow-y", 1) + n.curCSS(this, "overflow-x", 1))
            }).eq(0),
            /fixed/.test(this.css("position")) || !t.length ? n(document) : t
        },
        zIndex: function(i) {
            if (i !== t) return this.css("zIndex", i);
            if (this.length) for (var r = n(this[0]), u, f; r.length && r[0] !== document;) {
                if (u = r.css("position"), (u === "absolute" || u === "relative" || u === "fixed") && (f = parseInt(r.css("zIndex"), 10), !isNaN(f) && f !== 0)) return f;
                r = r.parent()
            }
            return 0
        },
        disableSelection: function() {
            return this.bind((n.support.selectstart ? "selectstart": "mousedown") + ".ui-disableSelection", 
            function(n) {
                n.preventDefault()
            })
        },
        enableSelection: function() {
            return this.unbind(".ui-disableSelection")
        }
    }), n.each(["Width", "Height"], 
    function(i, r) {
        function u(t, i, r, u) {
            return n.each(o, 
            function() {
                i -= parseFloat(n.curCSS(t, "padding" + this, !0)) || 0,
                r && (i -= parseFloat(n.curCSS(t, "border" + this + "Width", !0)) || 0),
                u && (i -= parseFloat(n.curCSS(t, "margin" + this, !0)) || 0)
            }),
            i
        }
        var o = r === "Width" ? ["Left", "Right"] : ["Top", "Bottom"],
        f = r.toLowerCase(),
        e = {
            innerWidth: n.fn.innerWidth,
            innerHeight: n.fn.innerHeight,
            outerWidth: n.fn.outerWidth,
            outerHeight: n.fn.outerHeight
        };
        n.fn["inner" + r] = function(i) {
            return i === t ? e["inner" + r].call(this) : this.each(function() {
                n(this).css(f, u(this, i) + "px")
            })
        },
        n.fn["outer" + r] = function(t, i) {
            return typeof t != "number" ? e["outer" + r].call(this, t) : this.each(function() {
                n(this).css(f, u(this, t, !0, i) + "px")
            })
        }
    }), n.extend(n.expr[":"], {
        data: function(t, i, r) {
            return !! n.data(t, r[3])
        },
        focusable: function(t) {
            return r(t, !isNaN(n.attr(t, "tabindex")))
        },
        tabbable: function(t) {
            var i = n.attr(t, "tabindex"),
            u = isNaN(i);
            return (u || i >= 0) && r(t, !u)
        }
    }), n(function() {
        var i = document.body,
        t = i.appendChild(t = document.createElement("div"));
        t.offsetHeight,
        n.extend(t.style, {
            minHeight: "100px",
            height: "auto",
            padding: 0,
            borderWidth: 0
        }),
        n.support.minHeight = t.offsetHeight === 100,
        n.support.selectstart = "onselectstart" in t,
        i.removeChild(t).style.display = "none"
    }), n.extend(n.ui, {
        plugin: {
            add: function(t, i, r) {
                var f = n.ui[t].prototype,
                u;
                for (u in r) f.plugins[u] = f.plugins[u] || [],
                f.plugins[u].push([i, r[u]])
            },
            call: function(n, t, i) {
                var u = n.plugins[t],
                r;
                if ( !! u && !!n.element[0].parentNode) for (r = 0; r < u.length; r++) n.options[u[r][0]] && u[r][1].apply(n.element, i)
            }
        },
        contains: function(n, t) {
            return document.compareDocumentPosition ? n.compareDocumentPosition(t) & 16: n !== t && n.contains(t)
        },
        hasScroll: function(t, i) {
            if (n(t).css("overflow") === "hidden") return ! 1;
            var r = i && i === "left" ? "scrollLeft": "scrollTop",
            u = !1;
            return t[r] > 0 ? !0: (t[r] = 1, u = t[r] > 0, t[r] = 0, u)
        },
        isOverAxis: function(n, t, i) {
            return n > t && n < t + i
        },
        isOver: function(t, i, r, u, f, e) {
            return n.ui.isOverAxis(t, r, f) && n.ui.isOverAxis(i, u, e)
        }
    }))
} (jQuery),
function(n, t) {
    var i,
    r;
    n.cleanData ? (i = n.cleanData, n.cleanData = function(t) {
        for (var r = 0, u; (u = t[r]) != null; r++) try {
            n(u).triggerHandler("remove")
        } catch(f) {}
        i(t)
    }) : (r = n.fn.remove, n.fn.remove = function(t, i) {
        return this.each(function() {
            return i || (!t || n.filter(t, [this]).length) && n("*", this).add([this]).each(function() {
                try {
                    n(this).triggerHandler("remove")
                } catch(t) {}
            }),
            r.call(n(this), t, i)
        })
    }),
    n.widget = function(t, i, r) {
        var u = t.split(".")[0],
        e,
        f;
        t = t.split(".")[1],
        e = u + "-" + t,
        r || (r = i, i = n.Widget),
        n.expr[":"][e] = function(i) {
            return !! n.data(i, t)
        },
        n[u] = n[u] || {},
        n[u][t] = function(n, t) {
            arguments.length && this._createWidget(n, t)
        },
        f = new i,
        f.options = n.extend(!0, {},
        f.options),
        n[u][t].prototype = n.extend(!0, f, {
            namespace: u,
            widgetName: t,
            widgetEventPrefix: n[u][t].prototype.widgetEventPrefix || t,
            widgetBaseClass: e
        },
        r),
        n.widget.bridge(t, n[u][t])
    },
    n.widget.bridge = function(i, r) {
        n.fn[i] = function(u) {
            var f = typeof u == "string",
            e = Array.prototype.slice.call(arguments, 1),
            o = this;
            return (u = !f && e.length ? n.extend.apply(null, [!0, u].concat(e)) : u, f && u.charAt(0) === "_") ? o: (f ? this.each(function() {
                var r = n.data(this, i),
                f = r && n.isFunction(r[u]) ? r[u].apply(r, e) : r;
                if (f !== r && f !== t) return o = f,
                !1
            }) : this.each(function() {
                var t = n.data(this, i);
                t ? t.option(u || {})._init() : n.data(this, i, new r(u, this))
            }), o)
        }
    },
    n.Widget = function(n, t) {
        arguments.length && this._createWidget(n, t)
    },
    n.Widget.prototype = {
        widgetName: "widget",
        widgetEventPrefix: "",
        options: {
            disabled: !1
        },
        _createWidget: function(t, i) {
            n.data(i, this.widgetName, this),
            this.element = n(i),
            this.options = n.extend(!0, {},
            this.options, this._getCreateOptions(), t);
            var r = this;
            this.element.bind("remove." + this.widgetName, 
            function() {
                r.destroy()
            }),
            this._create(),
            this._trigger("create"),
            this._init()
        },
        _getCreateOptions: function() {
            return n.metadata && n.metadata.get(this.element[0])[this.widgetName]
        },
        _create: function() {},
        _init: function() {},
        destroy: function() {
            this.element.unbind("." + this.widgetName).removeData(this.widgetName),
            this.widget().unbind("." + this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass + "-disabled ui-state-disabled")
        },
        widget: function() {
            return this.element
        },
        option: function(i, r) {
            var u = i;
            if (arguments.length === 0) return n.extend({},
            this.options);
            if (typeof i == "string") {
                if (r === t) return this.options[i];
                u = {},
                u[i] = r
            }
            return this._setOptions(u),
            this
        },
        _setOptions: function(t) {
            var i = this;
            return n.each(t, 
            function(n, t) {
                i._setOption(n, t)
            }),
            this
        },
        _setOption: function(n, t) {
            return this.options[n] = t,
            n === "disabled" && this.widget()[t ? "addClass": "removeClass"](this.widgetBaseClass + "-disabled ui-state-disabled").attr("aria-disabled", t),
            this
        },
        enable: function() {
            return this._setOption("disabled", !1)
        },
        disable: function() {
            return this._setOption("disabled", !0)
        },
        _trigger: function(t, i, r) {
            var u,
            f,
            e = this.options[t];
            if (r = r || {},
            i = n.Event(i), i.type = (t === this.widgetEventPrefix ? t: this.widgetEventPrefix + t).toLowerCase(), i.target = this.element[0], f = i.originalEvent, f) for (u in f) u in i || (i[u] = f[u]);
            return this.element.trigger(i, r),
            !(n.isFunction(e) && e.call(this.element[0], i, r) === !1 || i.isDefaultPrevented())
        }
    }
} (jQuery),
function(n) {
    var i = !1;
    n(document).mouseup(function() {
        i = !1
    }),
    n.widget("ui.mouse", {
        options: {
            cancel: ":input,option",
            distance: 1,
            delay: 0
        },
        _mouseInit: function() {
            var t = this;
            this.element.bind("mousedown." + this.widgetName, 
            function(n) {
                return t._mouseDown(n)
            }).bind("click." + this.widgetName, 
            function(i) {
                if (!0 === n.data(i.target, t.widgetName + ".preventClickEvent")) return n.removeData(i.target, t.widgetName + ".preventClickEvent"),
                i.stopImmediatePropagation(),
                !1
            }),
            this.started = !1
        },
        _mouseDestroy: function() {
            this.element.unbind("." + this.widgetName)
        },
        _mouseDown: function(t) {
            if (!i) {
                this._mouseStarted && this._mouseUp(t),
                this._mouseDownEvent = t;
                var r = this,
                u = t.which == 1,
                f = typeof this.options.cancel == "string" && t.target.nodeName ? n(t.target).closest(this.options.cancel).length: !1;
                return ! u || f || !this._mouseCapture(t) ? !0: (this.mouseDelayMet = !this.options.delay, this.mouseDelayMet || (this._mouseDelayTimer = setTimeout(function() {
                    r.mouseDelayMet = !0
                },
                this.options.delay)), this._mouseDistanceMet(t) && this._mouseDelayMet(t) && (this._mouseStarted = this._mouseStart(t) !== !1, !this._mouseStarted)) ? (t.preventDefault(), !0) : (!0 === n.data(t.target, this.widgetName + ".preventClickEvent") && n.removeData(t.target, this.widgetName + ".preventClickEvent"), this._mouseMoveDelegate = function(n) {
                    return r._mouseMove(n)
                },
                this._mouseUpDelegate = function(n) {
                    return r._mouseUp(n)
                },
                n(document).bind("mousemove." + this.widgetName, this._mouseMoveDelegate).bind("mouseup." + this.widgetName, this._mouseUpDelegate), t.preventDefault(), i = !0, !0)
            }
        },
        _mouseMove: function(t) {
            return n.browser.msie && !(document.documentMode >= 9) && !t.button ? this._mouseUp(t) : this._mouseStarted ? (this._mouseDrag(t), t.preventDefault()) : (this._mouseDistanceMet(t) && this._mouseDelayMet(t) && (this._mouseStarted = this._mouseStart(this._mouseDownEvent, t) !== !1, this._mouseStarted ? this._mouseDrag(t) : this._mouseUp(t)), !this._mouseStarted)
        },
        _mouseUp: function(t) {
            return n(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate),
            this._mouseStarted && (this._mouseStarted = !1, t.target == this._mouseDownEvent.target && n.data(t.target, this.widgetName + ".preventClickEvent", !0), this._mouseStop(t)),
            !1
        },
        _mouseDistanceMet: function(n) {
            return Math.max(Math.abs(this._mouseDownEvent.pageX - n.pageX), Math.abs(this._mouseDownEvent.pageY - n.pageY)) >= this.options.distance
        },
        _mouseDelayMet: function() {
            return this.mouseDelayMet
        },
        _mouseStart: function() {},
        _mouseDrag: function() {},
        _mouseStop: function() {},
        _mouseCapture: function() {
            return ! 0
        }
    })
} (jQuery),
function(n) {
    n.widget("ui.draggable", n.ui.mouse, {
        widgetEventPrefix: "drag",
        options: {
            addClasses: !0,
            appendTo: "parent",
            axis: !1,
            connectToSortable: !1,
            containment: !1,
            cursor: "auto",
            cursorAt: !1,
            grid: !1,
            handle: !1,
            helper: "original",
            iframeFix: !1,
            opacity: !1,
            refreshPositions: !1,
            revert: !1,
            revertDuration: 500,
            scope: "default",
            scroll: !0,
            scrollSensitivity: 20,
            scrollSpeed: 20,
            snap: !1,
            snapMode: "both",
            snapTolerance: 20,
            stack: !1,
            zIndex: !1
        },
        _create: function() {
            this.options.helper == "original" && !/^(?:r|a|f)/.test(this.element.css("position")) && (this.element[0].style.position = "relative"),
            this.options.addClasses && this.element.addClass("ui-draggable"),
            this.options.disabled && this.element.addClass("ui-draggable-disabled"),
            this._mouseInit()
        },
        destroy: function() {
            if (this.element.data("draggable")) return this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),
            this._mouseDestroy(),
            this
        },
        _mouseCapture: function(t) {
            var i = this.options;
            return this.helper || i.disabled || n(t.target).is(".ui-resizable-handle") ? !1: (this.handle = this._getHandle(t), !this.handle) ? !1: (i.iframeFix && n(i.iframeFix === !0 ? "iframe": i.iframeFix).each(function() {
                n('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({
                    width: this.offsetWidth + "px",
                    height: this.offsetHeight + "px",
                    position: "absolute",
                    opacity: "0.001",
                    zIndex: 1e3
                }).css(n(this).offset()).appendTo("body")
            }), !0)
        },
        _mouseStart: function(t) {
            var i = this.options;
            return (this.helper = this._createHelper(t), this._cacheHelperProportions(), n.ui.ddmanager && (n.ui.ddmanager.current = this), this._cacheMargins(), this.cssPosition = this.helper.css("position"), this.scrollParent = this.helper.scrollParent(), this.offset = this.positionAbs = this.element.offset(), this.offset = {
                top: this.offset.top - this.margins.top,
                left: this.offset.left - this.margins.left
            },
            n.extend(this.offset, {
                click: {
                    left: t.pageX - this.offset.left,
                    top: t.pageY - this.offset.top
                },
                parent: this._getParentOffset(),
                relative: this._getRelativeOffset()
            }), this.originalPosition = this.position = this._generatePosition(t), this.originalPageX = t.pageX, this.originalPageY = t.pageY, i.cursorAt && this._adjustOffsetFromHelper(i.cursorAt), i.containment && this._setContainment(), this._trigger("start", t) === !1) ? (this._clear(), !1) : (this._cacheHelperProportions(), n.ui.ddmanager && !i.dropBehaviour && n.ui.ddmanager.prepareOffsets(this, t), this.helper.addClass("ui-draggable-dragging"), this._mouseDrag(t, !0), n.ui.ddmanager && n.ui.ddmanager.dragStart(this, t), !0)
        },
        _mouseDrag: function(t, i) {
            if (this.position = this._generatePosition(t), this.positionAbs = this._convertPositionTo("absolute"), !i) {
                var r = this._uiHash();
                if (this._trigger("drag", t, r) === !1) return this._mouseUp({}),
                !1;
                this.position = r.position
            }
            return this.options.axis && this.options.axis == "y" || (this.helper[0].style.left = this.position.left + "px"),
            this.options.axis && this.options.axis == "x" || (this.helper[0].style.top = this.position.top + "px"),
            n.ui.ddmanager && n.ui.ddmanager.drag(this, t),
            !1
        },
        _mouseStop: function(t) {
            var i = !1,
            r;
            return (n.ui.ddmanager && !this.options.dropBehaviour && (i = n.ui.ddmanager.drop(this, t)), this.dropped && (i = this.dropped, this.dropped = !1), (!this.element[0] || !this.element[0].parentNode) && this.options.helper == "original") ? !1: (this.options.revert == "invalid" && !i || this.options.revert == "valid" && i || this.options.revert === !0 || n.isFunction(this.options.revert) && this.options.revert.call(this.element, i) ? (r = this, n(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), 
            function() {
                r._trigger("stop", t) !== !1 && r._clear()
            })) : this._trigger("stop", t) !== !1 && this._clear(), !1)
        },
        _mouseUp: function(t) {
            return this.options.iframeFix === !0 && n("div.ui-draggable-iframeFix").each(function() {
                this.parentNode.removeChild(this)
            }),
            n.ui.ddmanager && n.ui.ddmanager.dragStop(this, t),
            n.ui.mouse.prototype._mouseUp.call(this, t)
        },
        cancel: function() {
            return this.helper.is(".ui-draggable-dragging") ? this._mouseUp({}) : this._clear(),
            this
        },
        _getHandle: function(t) {
            var i = !this.options.handle || !n(this.options.handle, this.element).length ? !0: !1;
            return n(this.options.handle, this.element).find("*").andSelf().each(function() {
                this == t.target && (i = !0)
            }),
            i
        },
        _createHelper: function(t) {
            var r = this.options,
            i = n.isFunction(r.helper) ? n(r.helper.apply(this.element[0], [t])) : r.helper == "clone" ? this.element.clone().removeAttr("id") : this.element;
            return i.parents("body").length || i.appendTo(r.appendTo == "parent" ? this.element[0].parentNode: r.appendTo),
            i[0] != this.element[0] && !/(fixed|absolute)/.test(i.css("position")) && i.css("position", "absolute"),
            i
        },
        _adjustOffsetFromHelper: function(t) {
            typeof t == "string" && (t = t.split(" ")),
            n.isArray(t) && (t = {
                left: +t[0],
                top: +t[1] || 0
            }),
            "left" in t && (this.offset.click.left = t.left + this.margins.left),
            "right" in t && (this.offset.click.left = this.helperProportions.width - t.right + this.margins.left),
            "top" in t && (this.offset.click.top = t.top + this.margins.top),
            "bottom" in t && (this.offset.click.top = this.helperProportions.height - t.bottom + this.margins.top)
        },
        _getParentOffset: function() {
            this.offsetParent = this.helper.offsetParent();
            var t = this.offsetParent.offset();
            return this.cssPosition == "absolute" && this.scrollParent[0] != document && n.ui.contains(this.scrollParent[0], this.offsetParent[0]) && (t.left += this.scrollParent.scrollLeft(), t.top += this.scrollParent.scrollTop()),
            (this.offsetParent[0] == document.body || this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == "html" && n.browser.msie) && (t = {
                top: 0,
                left: 0
            }),
            {
                top: t.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                left: t.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
            }
        },
        _getRelativeOffset: function() {
            if (this.cssPosition == "relative") {
                var n = this.element.position();
                return {
                    top: n.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
                    left: n.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
                }
            }
            return {
                top: 0,
                left: 0
            }
        },
        _cacheMargins: function() {
            this.margins = {
                left: parseInt(this.element.css("marginLeft"), 10) || 0,
                top: parseInt(this.element.css("marginTop"), 10) || 0,
                right: parseInt(this.element.css("marginRight"), 10) || 0,
                bottom: parseInt(this.element.css("marginBottom"), 10) || 0
            }
        },
        _cacheHelperProportions: function() {
            this.helperProportions = {
                width: this.helper.outerWidth(),
                height: this.helper.outerHeight()
            }
        },
        _setContainment: function() {
            var i = this.options,
            r,
            t,
            f,
            u;
            if (i.containment == "parent" && (i.containment = this.helper[0].parentNode), (i.containment == "document" || i.containment == "window") && (this.containment = [i.containment == "document" ? 0: n(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, i.containment == "document" ? 0: n(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, (i.containment == "document" ? 0: n(window).scrollLeft()) + n(i.containment == "document" ? document: window).width() - this.helperProportions.width - this.margins.left, (i.containment == "document" ? 0: n(window).scrollTop()) + (n(i.containment == "document" ? document: window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]), /^(document|window|parent)$/.test(i.containment) || i.containment.constructor == Array) i.containment.constructor == Array && (this.containment = i.containment);
            else {
                if (r = n(i.containment), t = r[0], !t) return;
                f = r.offset(),
                u = n(t).css("overflow") != "hidden",
                this.containment = [(parseInt(n(t).css("borderLeftWidth"), 10) || 0) + (parseInt(n(t).css("paddingLeft"), 10) || 0), (parseInt(n(t).css("borderTopWidth"), 10) || 0) + (parseInt(n(t).css("paddingTop"), 10) || 0), (u ? Math.max(t.scrollWidth, t.offsetWidth) : t.offsetWidth) - (parseInt(n(t).css("borderLeftWidth"), 10) || 0) - (parseInt(n(t).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, (u ? Math.max(t.scrollHeight, t.offsetHeight) : t.offsetHeight) - (parseInt(n(t).css("borderTopWidth"), 10) || 0) - (parseInt(n(t).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom],
                this.relative_container = r
            }
        },
        _convertPositionTo: function(t, i) {
            i || (i = this.position);
            var r = t == "absolute" ? 1: -1,
            e = this.options,
            u = this.cssPosition == "absolute" && (this.scrollParent[0] == document || !n.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent: this.scrollParent,
            f = /(html|body)/i.test(u[0].tagName);
            return {
                top: i.top + this.offset.relative.top * r + this.offset.parent.top * r - (n.browser.safari && n.browser.version < 526 && this.cssPosition == "fixed" ? 0: (this.cssPosition == "fixed" ? -this.scrollParent.scrollTop() : f ? 0: u.scrollTop()) * r),
                left: i.left + this.offset.relative.left * r + this.offset.parent.left * r - (n.browser.safari && n.browser.version < 526 && this.cssPosition == "fixed" ? 0: (this.cssPosition == "fixed" ? -this.scrollParent.scrollLeft() : f ? 0: u.scrollLeft()) * r)
            }
        },
        _generatePosition: function(t) {
            var r = this.options,
            h = this.cssPosition == "absolute" && (this.scrollParent[0] == document || !n.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent: this.scrollParent,
            c = /(html|body)/i.test(h[0].tagName),
            e = t.pageX,
            o = t.pageY,
            i,
            s,
            u,
            f;
            return this.originalPosition && (this.containment && (this.relative_container ? (s = this.relative_container.offset(), i = [this.containment[0] + s.left, this.containment[1] + s.top, this.containment[2] + s.left, this.containment[3] + s.top]) : i = this.containment, t.pageX - this.offset.click.left < i[0] && (e = i[0] + this.offset.click.left), t.pageY - this.offset.click.top < i[1] && (o = i[1] + this.offset.click.top), t.pageX - this.offset.click.left > i[2] && (e = i[2] + this.offset.click.left), t.pageY - this.offset.click.top > i[3] && (o = i[3] + this.offset.click.top)), r.grid && (u = r.grid[1] ? this.originalPageY + Math.round((o - this.originalPageY) / r.grid[1]) * r.grid[1] : this.originalPageY, o = i ? u - this.offset.click.top < i[1] || u - this.offset.click.top > i[3] ? u - this.offset.click.top < i[1] ? u + r.grid[1] : u - r.grid[1] : u: u, f = r.grid[0] ? this.originalPageX + Math.round((e - this.originalPageX) / r.grid[0]) * r.grid[0] : this.originalPageX, e = i ? f - this.offset.click.left < i[0] || f - this.offset.click.left > i[2] ? f - this.offset.click.left < i[0] ? f + r.grid[0] : f - r.grid[0] : f: f)),
            {
                top: o - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + (n.browser.safari && n.browser.version < 526 && this.cssPosition == "fixed" ? 0: this.cssPosition == "fixed" ? -this.scrollParent.scrollTop() : c ? 0: h.scrollTop()),
                left: e - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + (n.browser.safari && n.browser.version < 526 && this.cssPosition == "fixed" ? 0: this.cssPosition == "fixed" ? -this.scrollParent.scrollLeft() : c ? 0: h.scrollLeft())
            }
        },
        _clear: function() {
            this.helper.removeClass("ui-draggable-dragging"),
            this.helper[0] != this.element[0] && !this.cancelHelperRemoval && this.helper.remove(),
            this.helper = null,
            this.cancelHelperRemoval = !1
        },
        _trigger: function(t, i, r) {
            return r = r || this._uiHash(),
            n.ui.plugin.call(this, t, [i, r]),
            t == "drag" && (this.positionAbs = this._convertPositionTo("absolute")),
            n.Widget.prototype._trigger.call(this, t, i, r)
        },
        plugins: {},
        _uiHash: function() {
            return {
                helper: this.helper,
                position: this.position,
                originalPosition: this.originalPosition,
                offset: this.positionAbs
            }
        }
    }),
    n.extend(n.ui.draggable, {
        version: "1.8.18"
    }),
    n.ui.plugin.add("draggable", "connectToSortable", {
        start: function(t, i) {
            var r = n(this).data("draggable"),
            u = r.options,
            f = n.extend({},
            i, {
                item: r.element
            });
            r.sortables = [],
            n(u.connectToSortable).each(function() {
                var i = n.data(this, "sortable");
                i && !i.options.disabled && (r.sortables.push({
                    instance: i,
                    shouldRevert: i.options.revert
                }), i.refreshPositions(), i._trigger("activate", t, f))
            })
        },
        stop: function(t, i) {
            var r = n(this).data("draggable"),
            u = n.extend({},
            i, {
                item: r.element
            });
            n.each(r.sortables, 
            function() {
                this.instance.isOver ? (this.instance.isOver = 0, r.cancelHelperRemoval = !0, this.instance.cancelHelperRemoval = !1, this.shouldRevert && (this.instance.options.revert = !0), this.instance._mouseStop(t), this.instance.options.helper = this.instance.options._helper, r.options.helper == "original" && this.instance.currentItem.css({
                    top: "auto",
                    left: "auto"
                })) : (this.instance.cancelHelperRemoval = !1, this.instance._trigger("deactivate", t, u))
            })
        },
        drag: function(t, i) {
            var r = n(this).data("draggable"),
            u = this,
            f = function(t) {
                var i = this.offset.click.top,
                r = this.offset.click.left,
                u = this.positionAbs.top,
                f = this.positionAbs.left,
                e = t.height,
                o = t.width,
                s = t.top,
                h = t.left;
                return n.ui.isOver(u + i, f + r, s, h, e, o)
            };
            n.each(r.sortables, 
            function() {
                this.instance.positionAbs = r.positionAbs,
                this.instance.helperProportions = r.helperProportions,
                this.instance.offset.click = r.offset.click,
                this.instance._intersectsWith(this.instance.containerCache) ? (this.instance.isOver || (this.instance.isOver = 1, this.instance.currentItem = n(u).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item", !0), this.instance.options._helper = this.instance.options.helper, this.instance.options.helper = function() {
                    return i.helper[0]
                },
                t.target = this.instance.currentItem[0], this.instance._mouseCapture(t, !0), this.instance._mouseStart(t, !0, !0), this.instance.offset.click.top = r.offset.click.top, this.instance.offset.click.left = r.offset.click.left, this.instance.offset.parent.left -= r.offset.parent.left - this.instance.offset.parent.left, this.instance.offset.parent.top -= r.offset.parent.top - this.instance.offset.parent.top, r._trigger("toSortable", t), r.dropped = this.instance.element, r.currentItem = r.element, this.instance.fromOutside = r), this.instance.currentItem && this.instance._mouseDrag(t)) : this.instance.isOver && (this.instance.isOver = 0, this.instance.cancelHelperRemoval = !0, this.instance.options.revert = !1, this.instance._trigger("out", t, this.instance._uiHash(this.instance)), this.instance._mouseStop(t, !0), this.instance.options.helper = this.instance.options._helper, this.instance.currentItem.remove(), this.instance.placeholder && this.instance.placeholder.remove(), r._trigger("fromSortable", t), r.dropped = !1)
            })
        }
    }),
    n.ui.plugin.add("draggable", "cursor", {
        start: function() {
            var r = n("body"),
            u = n(this).data("draggable").options;
            r.css("cursor") && (u._cursor = r.css("cursor")),
            r.css("cursor", u.cursor)
        },
        stop: function() {
            var r = n(this).data("draggable").options;
            r._cursor && n("body").css("cursor", r._cursor)
        }
    }),
    n.ui.plugin.add("draggable", "opacity", {
        start: function(t, i) {
            var r = n(i.helper),
            u = n(this).data("draggable").options;
            r.css("opacity") && (u._opacity = r.css("opacity")),
            r.css("opacity", u.opacity)
        },
        stop: function(t, i) {
            var r = n(this).data("draggable").options;
            r._opacity && n(i.helper).css("opacity", r._opacity)
        }
    }),
    n.ui.plugin.add("draggable", "scroll", {
        start: function() {
            var r = n(this).data("draggable");
            r.scrollParent[0] != document && r.scrollParent[0].tagName != "HTML" && (r.overflowOffset = r.scrollParent.offset())
        },
        drag: function(t) {
            var u = n(this).data("draggable"),
            r = u.options,
            f = !1;
            u.scrollParent[0] != document && u.scrollParent[0].tagName != "HTML" ? (r.axis && r.axis == "x" || (u.overflowOffset.top + u.scrollParent[0].offsetHeight - t.pageY < r.scrollSensitivity ? u.scrollParent[0].scrollTop = f = u.scrollParent[0].scrollTop + r.scrollSpeed: t.pageY - u.overflowOffset.top < r.scrollSensitivity && (u.scrollParent[0].scrollTop = f = u.scrollParent[0].scrollTop - r.scrollSpeed)), r.axis && r.axis == "y" || (u.overflowOffset.left + u.scrollParent[0].offsetWidth - t.pageX < r.scrollSensitivity ? u.scrollParent[0].scrollLeft = f = u.scrollParent[0].scrollLeft + r.scrollSpeed: t.pageX - u.overflowOffset.left < r.scrollSensitivity && (u.scrollParent[0].scrollLeft = f = u.scrollParent[0].scrollLeft - r.scrollSpeed))) : (r.axis && r.axis == "x" || (t.pageY - n(document).scrollTop() < r.scrollSensitivity ? f = n(document).scrollTop(n(document).scrollTop() - r.scrollSpeed) : n(window).height() - (t.pageY - n(document).scrollTop()) < r.scrollSensitivity && (f = n(document).scrollTop(n(document).scrollTop() + r.scrollSpeed))), r.axis && r.axis == "y" || (t.pageX - n(document).scrollLeft() < r.scrollSensitivity ? f = n(document).scrollLeft(n(document).scrollLeft() - r.scrollSpeed) : n(window).width() - (t.pageX - n(document).scrollLeft()) < r.scrollSensitivity && (f = n(document).scrollLeft(n(document).scrollLeft() + r.scrollSpeed)))),
            f !== !1 && n.ui.ddmanager && !r.dropBehaviour && n.ui.ddmanager.prepareOffsets(u, t)
        }
    }),
    n.ui.plugin.add("draggable", "snap", {
        start: function() {
            var r = n(this).data("draggable"),
            u = r.options;
            r.snapElements = [],
            n(u.snap.constructor != String ? u.snap.items || ":data(draggable)": u.snap).each(function() {
                var t = n(this),
                i = t.offset();
                this != r.element[0] && r.snapElements.push({
                    item: this,
                    width: t.outerWidth(),
                    height: t.outerHeight(),
                    top: i.top,
                    left: i.left
                })
            })
        },
        drag: function(t, i) {
            for (var r = n(this).data("draggable"), k = r.options, u = k.snapTolerance, c = i.offset.left, a = c + r.helperProportions.width, l = i.offset.top, v = l + r.helperProportions.height, d, f = r.snapElements.length - 1; f >= 0; f--) {
                var e = r.snapElements[f].left,
                s = e + r.snapElements[f].width,
                o = r.snapElements[f].top,
                h = o + r.snapElements[f].height;
                if (! (e - u < c && c < s + u && o - u < l && l < h + u || e - u < c && c < s + u && o - u < v && v < h + u || e - u < a && a < s + u && o - u < l && l < h + u || e - u < a && a < s + u && o - u < v && v < h + u)) {
                    r.snapElements[f].snapping && r.options.snap.release && r.options.snap.release.call(r.element, t, n.extend(r._uiHash(), {
                        snapItem: r.snapElements[f].item
                    })),
                    r.snapElements[f].snapping = !1;
                    continue
                }
                if (k.snapMode != "inner") {
                    var p = Math.abs(o - v) <= u,
                    w = Math.abs(h - l) <= u,
                    b = Math.abs(e - a) <= u,
                    y = Math.abs(s - c) <= u;
                    p && (i.position.top = r._convertPositionTo("relative", {
                        top: o - r.helperProportions.height,
                        left: 0
                    }).top - r.margins.top),
                    w && (i.position.top = r._convertPositionTo("relative", {
                        top: h,
                        left: 0
                    }).top - r.margins.top),
                    b && (i.position.left = r._convertPositionTo("relative", {
                        top: 0,
                        left: e - r.helperProportions.width
                    }).left - r.margins.left),
                    y && (i.position.left = r._convertPositionTo("relative", {
                        top: 0,
                        left: s
                    }).left - r.margins.left)
                }
                if (d = p || w || b || y, k.snapMode != "outer") {
                    var p = Math.abs(o - l) <= u,
                    w = Math.abs(h - v) <= u,
                    b = Math.abs(e - c) <= u,
                    y = Math.abs(s - a) <= u;
                    p && (i.position.top = r._convertPositionTo("relative", {
                        top: o,
                        left: 0
                    }).top - r.margins.top),
                    w && (i.position.top = r._convertPositionTo("relative", {
                        top: h - r.helperProportions.height,
                        left: 0
                    }).top - r.margins.top),
                    b && (i.position.left = r._convertPositionTo("relative", {
                        top: 0,
                        left: e
                    }).left - r.margins.left),
                    y && (i.position.left = r._convertPositionTo("relative", {
                        top: 0,
                        left: s - r.helperProportions.width
                    }).left - r.margins.left)
                } ! r.snapElements[f].snapping && (p || w || b || y || d) && r.options.snap.snap && r.options.snap.snap.call(r.element, t, n.extend(r._uiHash(), {
                    snapItem: r.snapElements[f].item
                })),
                r.snapElements[f].snapping = p || w || b || y || d
            }
        }
    }),
    n.ui.plugin.add("draggable", "stack", {
        start: function() {
            var f = n(this).data("draggable").options,
            r = n.makeArray(n(f.stack)).sort(function(t, i) {
                return (parseInt(n(t).css("zIndex"), 10) || 0) - (parseInt(n(i).css("zIndex"), 10) || 0)
            }),
            u; ! r.length || (u = parseInt(r[0].style.zIndex) || 0, n(r).each(function(n) {
                this.style.zIndex = u + n
            }), this[0].style.zIndex = u + r.length)
        }
    }),
    n.ui.plugin.add("draggable", "zIndex", {
        start: function(t, i) {
            var r = n(i.helper),
            u = n(this).data("draggable").options;
            r.css("zIndex") && (u._zIndex = r.css("zIndex")),
            r.css("zIndex", u.zIndex)
        },
        stop: function(t, i) {
            var r = n(this).data("draggable").options;
            r._zIndex && n(i.helper).css("zIndex", r._zIndex)
        }
    })
} (jQuery),
function(n) {
    n.widget("ui.droppable", {
        widgetEventPrefix: "drop",
        options: {
            accept: "*",
            activeClass: !1,
            addClasses: !0,
            greedy: !1,
            hoverClass: !1,
            scope: "default",
            tolerance: "intersect"
        },
        _create: function() {
            var t = this.options,
            i = t.accept;
            this.isover = 0,
            this.isout = 1,
            this.accept = n.isFunction(i) ? i: function(n) {
                return n.is(i)
            },
            this.proportions = {
                width: this.element[0].offsetWidth,
                height: this.element[0].offsetHeight
            },
            n.ui.ddmanager.droppables[t.scope] = n.ui.ddmanager.droppables[t.scope] || [],
            n.ui.ddmanager.droppables[t.scope].push(this),
            t.addClasses && this.element.addClass("ui-droppable")
        },
        destroy: function() {
            for (var i = n.ui.ddmanager.droppables[this.options.scope], t = 0; t < i.length; t++) i[t] == this && i.splice(t, 1);
            return this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable"),
            this
        },
        _setOption: function(t, i) {
            t == "accept" && (this.accept = n.isFunction(i) ? i: function(n) {
                return n.is(i)
            }),
            n.Widget.prototype._setOption.apply(this, arguments)
        },
        _activate: function(t) {
            var i = n.ui.ddmanager.current;
            this.options.activeClass && this.element.addClass(this.options.activeClass),
            i && this._trigger("activate", t, this.ui(i))
        },
        _deactivate: function(t) {
            var i = n.ui.ddmanager.current;
            this.options.activeClass && this.element.removeClass(this.options.activeClass),
            i && this._trigger("deactivate", t, this.ui(i))
        },
        _over: function(t) {
            var i = n.ui.ddmanager.current; !! i && (i.currentItem || i.element)[0] != this.element[0] && this.accept.call(this.element[0], i.currentItem || i.element) && (this.options.hoverClass && this.element.addClass(this.options.hoverClass), this._trigger("over", t, this.ui(i)))
        },
        _out: function(t) {
            var i = n.ui.ddmanager.current; !! i && (i.currentItem || i.element)[0] != this.element[0] && this.accept.call(this.element[0], i.currentItem || i.element) && (this.options.hoverClass && this.element.removeClass(this.options.hoverClass), this._trigger("out", t, this.ui(i)))
        },
        _drop: function(t, i) {
            var r = i || n.ui.ddmanager.current,
            u;
            return ! r || (r.currentItem || r.element)[0] == this.element[0] ? !1: (u = !1, this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() {
                var t = n.data(this, "droppable");
                if (t.options.greedy && !t.options.disabled && t.options.scope == r.options.scope && t.accept.call(t.element[0], r.currentItem || r.element) && n.ui.intersect(r, n.extend(t, {
                    offset: t.element.offset()
                }), t.options.tolerance)) return u = !0,
                !1
            }), u) ? !1: this.accept.call(this.element[0], r.currentItem || r.element) ? (this.options.activeClass && this.element.removeClass(this.options.activeClass), this.options.hoverClass && this.element.removeClass(this.options.hoverClass), this._trigger("drop", t, this.ui(r)), this.element) : !1
        },
        ui: function(n) {
            return {
                draggable: n.currentItem || n.element,
                helper: n.helper,
                position: n.position,
                offset: n.positionAbs
            }
        }
    }),
    n.extend(n.ui.droppable, {
        version: "1.8.18"
    }),
    n.ui.intersect = function(t, i, r) {
        if (!i.offset) return ! 1;
        var e = (t.positionAbs || t.position.absolute).left,
        s = e + t.helperProportions.width,
        o = (t.positionAbs || t.position.absolute).top,
        h = o + t.helperProportions.height,
        u = i.offset.left,
        c = u + i.proportions.width,
        f = i.offset.top,
        l = f + i.proportions.height;
        switch (r) {
        case "fit":
            return u <= e && s <= c && f <= o && h <= l;
        case "intersect":
            return u < e + t.helperProportions.width / 2 && s - t.helperProportions.width / 2 < c && f < o + t.helperProportions.height / 2 && h - t.helperProportions.height / 2 < l;
        case "pointer":
            var a = (t.positionAbs || t.position.absolute).left + (t.clickOffset || t.offset.click).left,
            v = (t.positionAbs || t.position.absolute).top + (t.clickOffset || t.offset.click).top;
            return n.ui.isOver(v, a, f, u, i.proportions.height, i.proportions.width);
        case "touch":
            return (o >= f && o <= l || h >= f && h <= l || o < f && h > l) && (e >= u && e <= c || s >= u && s <= c || e < u && s > c);
        default:
            return ! 1
        }
    },
    n.ui.ddmanager = {
        current: null,
        droppables: {
            "default": []
        },
        prepareOffsets: function(t, i) {
            var u = n.ui.ddmanager.droppables[t.options.scope] || [],
            o = i ? i.type: null,
            e = (t.currentItem || t.element).find(":data(droppable)").andSelf(),
            r,
            f;
            n: for (r = 0; r < u.length; r++) if (!u[r].options.disabled && (!t || u[r].accept.call(u[r].element[0], t.currentItem || t.element))) {
                for (f = 0; f < e.length; f++) if (e[f] == u[r].element[0]) {
                    u[r].proportions.height = 0;
                    continue n
                } (u[r].visible = u[r].element.css("display") != "none", u[r].visible) && (o == "mousedown" && u[r]._activate.call(u[r], i), u[r].offset = u[r].element.offset(), u[r].proportions = {
                    width: u[r].element[0].offsetWidth,
                    height: u[r].element[0].offsetHeight
                })
            }
        },
        drop: function(t, i) {
            var r = !1;
            return n.each(n.ui.ddmanager.droppables[t.options.scope] || [], 
            function() { ! this.options || (!this.options.disabled && this.visible && n.ui.intersect(t, this, this.options.tolerance) && (r = this._drop.call(this, i) || r), !this.options.disabled && this.visible && this.accept.call(this.element[0], t.currentItem || t.element) && (this.isout = 1, this.isover = 0, this._deactivate.call(this, i)))
            }),
            r
        },
        dragStart: function(t, i) {
            t.element.parents(":not(body,html)").bind("scroll.droppable", 
            function() {
                t.options.refreshPositions || n.ui.ddmanager.prepareOffsets(t, i)
            })
        },
        drag: function(t, i) {
            t.options.refreshPositions && n.ui.ddmanager.prepareOffsets(t, i),
            n.each(n.ui.ddmanager.droppables[t.options.scope] || [], 
            function() {
                var f,
                u,
                r,
                e;
                if (! (this.options.disabled || this.greedyChild || !this.visible)) {
                    if (f = n.ui.intersect(t, this, this.options.tolerance), u = !f && this.isover == 1 ? "isout": f && this.isover == 0 ? "isover": null, !u) return;
                    this.options.greedy && (e = this.element.parents(":data(droppable):eq(0)"), e.length && (r = n.data(e[0], "droppable"), r.greedyChild = u == "isover" ? 1: 0)),
                    r && u == "isover" && (r.isover = 0, r.isout = 1, r._out.call(r, i)),
                    this[u] = 1,
                    this[u == "isout" ? "isover": "isout"] = 0,
                    this[u == "isover" ? "_over": "_out"].call(this, i),
                    r && u == "isout" && (r.isout = 0, r.isover = 1, r._over.call(r, i))
                }
            })
        },
        dragStop: function(t, i) {
            t.element.parents(":not(body,html)").unbind("scroll.droppable"),
            t.options.refreshPositions || n.ui.ddmanager.prepareOffsets(t, i)
        }
    }
} (jQuery),
function(n) {
    n.widget("ui.resizable", n.ui.mouse, {
        widgetEventPrefix: "resize",
        options: {
            alsoResize: !1,
            animate: !1,
            animateDuration: "slow",
            animateEasing: "swing",
            aspectRatio: !1,
            autoHide: !1,
            containment: !1,
            ghost: !1,
            grid: !1,
            handles: "e,s,se",
            helper: !1,
            maxHeight: null,
            maxWidth: null,
            minHeight: 10,
            minWidth: 10,
            zIndex: 1e3
        },
        _create: function() {
            var i = this,
            t = this.options,
            f,
            u;
            if (this.element.addClass("ui-resizable"), n.extend(this, {
                _aspectRatio: !!t.aspectRatio,
                aspectRatio: t.aspectRatio,
                originalElement: this.element,
                _proportionallyResizeElements: [],
                _helper: t.helper || t.ghost || t.animate ? t.helper || "ui-resizable-helper": null
            }), this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i) && (this.element.wrap(n('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
                position: this.element.css("position"),
                width: this.element.outerWidth(),
                height: this.element.outerHeight(),
                top: this.element.css("top"),
                left: this.element.css("left")
            })), this.element = this.element.parent().data("resizable", this.element.data("resizable")), this.elementIsWrapper = !0, this.element.css({
                marginLeft: this.originalElement.css("marginLeft"),
                marginTop: this.originalElement.css("marginTop"),
                marginRight: this.originalElement.css("marginRight"),
                marginBottom: this.originalElement.css("marginBottom")
            }), this.originalElement.css({
                marginLeft: 0,
                marginTop: 0,
                marginRight: 0,
                marginBottom: 0
            }), this.originalResizeStyle = this.originalElement.css("resize"), this.originalElement.css("resize", "none"), this._proportionallyResizeElements.push(this.originalElement.css({
                position: "static",
                zoom: 1,
                display: "block"
            })), this.originalElement.css({
                margin: this.originalElement.css("margin")
            }), this._proportionallyResize()), this.handles = t.handles || (n(".ui-resizable-handle", this.element).length ? {
                n: ".ui-resizable-n",
                e: ".ui-resizable-e",
                s: ".ui-resizable-s",
                w: ".ui-resizable-w",
                se: ".ui-resizable-se",
                sw: ".ui-resizable-sw",
                ne: ".ui-resizable-ne",
                nw: ".ui-resizable-nw"
            }: "e,s,se"), this.handles.constructor == String) for (this.handles == "all" && (this.handles = "n,e,s,w,se,sw,ne,nw"), f = this.handles.split(","), this.handles = {},
            u = 0; u < f.length; u++) {
                var r = n.trim(f[u]),
                o = "ui-resizable-" + r,
                e = n('<div class="ui-resizable-handle ' + o + '"></div>');
                /sw|se|ne|nw/.test(r) && e.css({
                    zIndex: ++t.zIndex
                }),
                "se" == r && e.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),
                this.handles[r] = ".ui-resizable-" + r,
                this.element.append(e)
            }
            this._renderAxis = function(t) {
                var i,
                r,
                u,
                f;
                t = t || this.element;
                for (i in this.handles) this.handles[i].constructor == String && (this.handles[i] = n(this.handles[i], this.element).show()),
                this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i) && (r = n(this.handles[i], this.element), u = 0, u = /sw|ne|nw|se|n|s/.test(i) ? r.outerHeight() : r.outerWidth(), f = ["padding", /ne|nw|n/.test(i) ? "Top": /se|sw|s/.test(i) ? "Bottom": /^e$/.test(i) ? "Right": "Left"].join(""), t.css(f, u), this._proportionallyResize()),
                !n(this.handles[i]).length
            },
            this._renderAxis(this.element),
            this._handles = n(".ui-resizable-handle", this.element).disableSelection(),
            this._handles.mouseover(function() {
                if (!i.resizing) {
                    if (this.className) var n = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
                    i.axis = n && n[1] ? n[1] : "se"
                }
            }),
            t.autoHide && (this._handles.hide(), n(this.element).addClass("ui-resizable-autohide").hover(function() {
                t.disabled || (n(this).removeClass("ui-resizable-autohide"), i._handles.show())
            },
            function() {
                t.disabled || i.resizing || (n(this).addClass("ui-resizable-autohide"), i._handles.hide())
            })),
            this._mouseInit()
        },
        destroy: function() {
            var i,
            t;
            return this._mouseDestroy(),
            i = function(t) {
                n(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()
            },
            this.elementIsWrapper && (i(this.element), t = this.element, t.after(this.originalElement.css({
                position: t.css("position"),
                width: t.outerWidth(),
                height: t.outerHeight(),
                top: t.css("top"),
                left: t.css("left")
            })).remove()),
            this.originalElement.css("resize", this.originalResizeStyle),
            i(this.originalElement),
            this
        },
        _mouseCapture: function(t) {
            var i = !1,
            r;
            for (r in this.handles) n(this.handles[r])[0] == t.target && (i = !0);
            return ! this.options.disabled && i
        },
        _mouseStart: function(t) {
            var u = this.options,
            s = this.element.position(),
            i = this.element,
            f,
            e,
            o;
            return this.resizing = !0,
            this.documentScroll = {
                top: n(document).scrollTop(),
                left: n(document).scrollLeft()
            },
            (i.is(".ui-draggable") || /absolute/.test(i.css("position"))) && i.css({
                position: "absolute",
                top: s.top,
                left: s.left
            }),
            this._renderProxy(),
            f = r(this.helper.css("left")),
            e = r(this.helper.css("top")),
            u.containment && (f += n(u.containment).scrollLeft() || 0, e += n(u.containment).scrollTop() || 0),
            this.offset = this.helper.offset(),
            this.position = {
                left: f,
                top: e
            },
            this.size = this._helper ? {
                width: i.outerWidth(),
                height: i.outerHeight()
            }: {
                width: i.width(),
                height: i.height()
            },
            this.originalSize = this._helper ? {
                width: i.outerWidth(),
                height: i.outerHeight()
            }: {
                width: i.width(),
                height: i.height()
            },
            this.originalPosition = {
                left: f,
                top: e
            },
            this.sizeDiff = {
                width: i.outerWidth() - i.width(),
                height: i.outerHeight() - i.height()
            },
            this.originalMousePosition = {
                left: t.pageX,
                top: t.pageY
            },
            this.aspectRatio = typeof u.aspectRatio == "number" ? u.aspectRatio: this.originalSize.width / this.originalSize.height || 1,
            o = n(".ui-resizable-" + this.axis).css("cursor"),
            n("body").css("cursor", o == "auto" ? this.axis + "-resize": o),
            i.addClass("ui-resizable-resizing"),
            this._propagate("start", t),
            !0
        },
        _mouseDrag: function(t) {
            var f = this.helper,
            h = this.options,
            c = {},
            l = this,
            r = this.originalMousePosition,
            e = this.axis,
            o = t.pageX - r.left || 0,
            s = t.pageY - r.top || 0,
            u = this._change[e];
            if (!u) return ! 1;
            var i = u.apply(this, [t, o, s]),
            a = n.browser.msie && n.browser.version < 7,
            v = this.sizeDiff;
            return this._updateVirtualBoundaries(t.shiftKey),
            (this._aspectRatio || t.shiftKey) && (i = this._updateRatio(i, t)),
            i = this._respectSize(i, t),
            this._propagate("resize", t),
            f.css({
                top: this.position.top + "px",
                left: this.position.left + "px",
                width: this.size.width + "px",
                height: this.size.height + "px"
            }),
            !this._helper && this._proportionallyResizeElements.length && this._proportionallyResize(),
            this._updateCache(i),
            this._trigger("resize", t, this.ui()),
            !1
        },
        _mouseStop: function(t) {
            var r,
            i;
            if (this.resizing = !1, r = this.options, i = this, this._helper) {
                var u = this._proportionallyResizeElements,
                f = u.length && /textarea/i.test(u[0].nodeName),
                e = f && n.ui.hasScroll(u[0], "left") ? 0: i.sizeDiff.height,
                o = f ? 0: i.sizeDiff.width,
                s = {
                    width: i.helper.width() - o,
                    height: i.helper.height() - e
                },
                h = parseInt(i.element.css("left"), 10) + (i.position.left - i.originalPosition.left) || null,
                c = parseInt(i.element.css("top"), 10) + (i.position.top - i.originalPosition.top) || null;
                r.animate || this.element.css(n.extend(s, {
                    top: c,
                    left: h
                })),
                i.helper.height(i.size.height),
                i.helper.width(i.size.width),
                this._helper && !r.animate && this._proportionallyResize()
            }
            return n("body").css("cursor", "auto"),
            this.element.removeClass("ui-resizable-resizing"),
            this._propagate("stop", t),
            this._helper && this.helper.remove(),
            !1
        },
        _updateVirtualBoundaries: function(n) {
            var r = this.options,
            u,
            f,
            e,
            o,
            t;
            t = {
                minWidth: i(r.minWidth) ? r.minWidth: 0,
                maxWidth: i(r.maxWidth) ? r.maxWidth: Infinity,
                minHeight: i(r.minHeight) ? r.minHeight: 0,
                maxHeight: i(r.maxHeight) ? r.maxHeight: Infinity
            },
            (this._aspectRatio || n) && (u = t.minHeight * this.aspectRatio, e = t.minWidth / this.aspectRatio, f = t.maxHeight * this.aspectRatio, o = t.maxWidth / this.aspectRatio, u > t.minWidth && (t.minWidth = u), e > t.minHeight && (t.minHeight = e), f < t.maxWidth && (t.maxWidth = f), o < t.maxHeight && (t.maxHeight = o)),
            this._vBoundaries = t
        },
        _updateCache: function(n) {
            var t = this.options;
            this.offset = this.helper.offset(),
            i(n.left) && (this.position.left = n.left),
            i(n.top) && (this.position.top = n.top),
            i(n.height) && (this.size.height = n.height),
            i(n.width) && (this.size.width = n.width)
        },
        _updateRatio: function(n) {
            var e = this.options,
            r = this.position,
            u = this.size,
            f = this.axis;
            return i(n.height) ? n.width = n.height * this.aspectRatio: i(n.width) && (n.height = n.width / this.aspectRatio),
            f == "sw" && (n.left = r.left + (u.width - n.width), n.top = null),
            f == "nw" && (n.top = r.top + (u.height - n.height), n.left = r.left + (u.width - n.width)),
            n
        },
        _respectSize: function(n, t) {
            var y = this.helper,
            r = this._vBoundaries,
            p = this._aspectRatio || t.shiftKey,
            f = this.axis,
            e = i(n.width) && r.maxWidth && r.maxWidth < n.width,
            o = i(n.height) && r.maxHeight && r.maxHeight < n.height,
            s = i(n.width) && r.minWidth && r.minWidth > n.width,
            h = i(n.height) && r.minHeight && r.minHeight > n.height,
            u;
            s && (n.width = r.minWidth),
            h && (n.height = r.minHeight),
            e && (n.width = r.maxWidth),
            o && (n.height = r.maxHeight);
            var c = this.originalPosition.left + this.originalSize.width,
            l = this.position.top + this.size.height,
            a = /sw|nw|w/.test(f),
            v = /nw|ne|n/.test(f);
            return s && a && (n.left = c - r.minWidth),
            e && a && (n.left = c - r.maxWidth),
            h && v && (n.top = l - r.minHeight),
            o && v && (n.top = l - r.maxHeight),
            u = !n.width && !n.height,
            u && !n.left && n.top ? n.top = null: u && !n.top && n.left && (n.left = null),
            n
        },
        _proportionallyResize: function() {
            var e = this.options,
            i,
            r,
            t,
            u,
            f;
            if ( !! this._proportionallyResizeElements.length) for (i = this.helper || this.element, r = 0; r < this._proportionallyResizeElements.length; r++)(t = this._proportionallyResizeElements[r], this.borderDif || (u = [t.css("borderTopWidth"), t.css("borderRightWidth"), t.css("borderBottomWidth"), t.css("borderLeftWidth")], f = [t.css("paddingTop"), t.css("paddingRight"), t.css("paddingBottom"), t.css("paddingLeft")], this.borderDif = n.map(u, 
            function(n, t) {
                var i = parseInt(n, 10) || 0,
                r = parseInt(f[t], 10) || 0;
                return i + r
            })), n.browser.msie && (n(i).is(":hidden") || n(i).parents(":hidden").length)) || t.css({
                height: i.height() - this.borderDif[0] - this.borderDif[2] || 0,
                width: i.width() - this.borderDif[1] - this.borderDif[3] || 0
            })
        },
        _renderProxy: function() {
            var u = this.element,
            f = this.options;
            if (this.elementOffset = u.offset(), this._helper) {
                this.helper = this.helper || n('<div style="overflow:hidden;"></div>');
                var t = n.browser.msie && n.browser.version < 7,
                i = t ? 1: 0,
                r = t ? 2: -1;
                this.helper.addClass(this._helper).css({
                    width: this.element.outerWidth() + r,
                    height: this.element.outerHeight() + r,
                    position: "absolute",
                    left: this.elementOffset.left - i + "px",
                    top: this.elementOffset.top - i + "px",
                    zIndex: ++f.zIndex
                }),
                this.helper.appendTo("body").disableSelection()
            } else this.helper = this.element
        },
        _change: {
            e: function(n, t) {
                return {
                    width: this.originalSize.width + t
                }
            },
            w: function(n, t) {
                var f = this.options,
                r = this.originalSize,
                u = this.originalPosition;
                return {
                    left: u.left + t,
                    width: r.width - t
                }
            },
            n: function(n, t, i) {
                var f = this.options,
                r = this.originalSize,
                u = this.originalPosition;
                return {
                    top: u.top + i,
                    height: r.height - i
                }
            },
            s: function(n, t, i) {
                return {
                    height: this.originalSize.height + i
                }
            },
            se: function(t, i, r) {
                return n.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [t, i, r]))
            },
            sw: function(t, i, r) {
                return n.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [t, i, r]))
            },
            ne: function(t, i, r) {
                return n.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [t, i, r]))
            },
            nw: function(t, i, r) {
                return n.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [t, i, r]))
            }
        },
        _propagate: function(t, i) {
            n.ui.plugin.call(this, t, [i, this.ui()]),
            t != "resize" && this._trigger(t, i, this.ui())
        },
        plugins: {},
        ui: function() {
            return {
                originalElement: this.originalElement,
                element: this.element,
                helper: this.helper,
                position: this.position,
                size: this.size,
                originalSize: this.originalSize,
                originalPosition: this.originalPosition
            }
        }
    }),
    n.extend(n.ui.resizable, {
        version: "1.8.18"
    }),
    n.ui.plugin.add("resizable", "alsoResize", {
        start: function() {
            var f = n(this).data("resizable"),
            r = f.options,
            u = function(t) {
                n(t).each(function() {
                    var t = n(this);
                    t.data("resizable-alsoresize", {
                        width: parseInt(t.width(), 10),
                        height: parseInt(t.height(), 10),
                        left: parseInt(t.css("left"), 10),
                        top: parseInt(t.css("top"), 10)
                    })
                })
            };
            typeof r.alsoResize == "object" && !r.alsoResize.parentNode ? r.alsoResize.length ? (r.alsoResize = r.alsoResize[0], u(r.alsoResize)) : n.each(r.alsoResize, 
            function(n) {
                u(n)
            }) : u(r.alsoResize)
        },
        resize: function(t, i) {
            var r = n(this).data("resizable"),
            u = r.options,
            f = r.originalSize,
            e = r.originalPosition,
            s = {
                height: r.size.height - f.height || 0,
                width: r.size.width - f.width || 0,
                top: r.position.top - e.top || 0,
                left: r.position.left - e.left || 0
            },
            o = function(t, r) {
                n(t).each(function() {
                    var t = n(this),
                    f = n(this).data("resizable-alsoresize"),
                    u = {},
                    e = r && r.length ? r: t.parents(i.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
                    n.each(e, 
                    function(n, t) {
                        var i = (f[t] || 0) + (s[t] || 0);
                        i && i >= 0 && (u[t] = i || null)
                    }),
                    t.css(u)
                })
            };
            typeof u.alsoResize == "object" && !u.alsoResize.nodeType ? n.each(u.alsoResize, 
            function(n, t) {
                o(n, t)
            }) : o(u.alsoResize)
        },
        stop: function() {
            n(this).removeData("resizable-alsoresize")
        }
    }),
    n.ui.plugin.add("resizable", "animate", {
        stop: function(t) {
            var r = n(this).data("resizable"),
            f = r.options,
            u = r._proportionallyResizeElements,
            e = u.length && /textarea/i.test(u[0].nodeName),
            h = e && n.ui.hasScroll(u[0], "left") ? 0: r.sizeDiff.height,
            c = e ? 0: r.sizeDiff.width,
            l = {
                width: r.size.width - c,
                height: r.size.height - h
            },
            o = parseInt(r.element.css("left"), 10) + (r.position.left - r.originalPosition.left) || null,
            s = parseInt(r.element.css("top"), 10) + (r.position.top - r.originalPosition.top) || null;
            r.element.animate(n.extend(l, s && o ? {
                top: s,
                left: o
            }: {}), {
                duration: f.animateDuration,
                easing: f.animateEasing,
                step: function() {
                    var i = {
                        width: parseInt(r.element.css("width"), 10),
                        height: parseInt(r.element.css("height"), 10),
                        top: parseInt(r.element.css("top"), 10),
                        left: parseInt(r.element.css("left"), 10)
                    };
                    u && u.length && n(u[0]).css({
                        width: i.width,
                        height: i.height
                    }),
                    r._updateCache(i),
                    r._propagate("resize", t)
                }
            })
        }
    }),
    n.ui.plugin.add("resizable", "containment", {
        start: function() {
            var u = n(this).data("resizable"),
            c = u.options,
            l = u.element,
            e = c.containment,
            f = e instanceof n ? e.get(0) : /parent/.test(e) ? l.parent().get(0) : e,
            o,
            s;
            if ( !! f) if (u.containerElement = n(f), /document/.test(e) || e == document) u.containerOffset = {
                left: 0,
                top: 0
            },
            u.containerPosition = {
                left: 0,
                top: 0
            },
            u.parentData = {
                element: n(document),
                left: 0,
                top: 0,
                width: n(document).width(),
                height: n(document).height() || document.body.parentNode.scrollHeight
            };
            else {
                o = n(f),
                s = [],
                n(["Top", "Right", "Left", "Bottom"]).each(function(n, t) {
                    s[n] = r(o.css("padding" + t))
                }),
                u.containerOffset = o.offset(),
                u.containerPosition = o.position(),
                u.containerSize = {
                    height: o.innerHeight() - s[3],
                    width: o.innerWidth() - s[1]
                };
                var h = u.containerOffset,
                a = u.containerSize.height,
                v = u.containerSize.width,
                y = n.ui.hasScroll(f, "left") ? f.scrollWidth: v,
                p = n.ui.hasScroll(f) ? f.scrollHeight: a;
                u.parentData = {
                    element: f,
                    left: h.left,
                    top: h.top,
                    width: y,
                    height: p
                }
            }
        },
        resize: function(t) {
            var r = n(this).data("resizable"),
            o = r.options,
            y = r.containerSize,
            u = r.containerOffset,
            p = r.size,
            h = r.position,
            e = r._aspectRatio || t.shiftKey,
            f = {
                top: 0,
                left: 0
            },
            c = r.containerElement;
            c[0] != document && /static/.test(c.css("position")) && (f = u),
            h.left < (r._helper ? u.left: 0) && (r.size.width = r.size.width + (r._helper ? r.position.left - u.left: r.position.left - f.left), e && (r.size.height = r.size.width / o.aspectRatio), r.position.left = o.helper ? u.left: 0),
            h.top < (r._helper ? u.top: 0) && (r.size.height = r.size.height + (r._helper ? r.position.top - u.top: r.position.top), e && (r.size.width = r.size.height * o.aspectRatio), r.position.top = r._helper ? u.top: 0),
            r.offset.left = r.parentData.left + r.position.left,
            r.offset.top = r.parentData.top + r.position.top;
            var s = Math.abs((r._helper ? r.offset.left - f.left: r.offset.left - f.left) + r.sizeDiff.width),
            l = Math.abs((r._helper ? r.offset.top - f.top: r.offset.top - u.top) + r.sizeDiff.height),
            a = r.containerElement.get(0) == r.element.parent().get(0),
            v = /relative|absolute/.test(r.containerElement.css("position"));
            a && v && (s -= r.parentData.left),
            s + r.size.width >= r.parentData.width && (r.size.width = r.parentData.width - s, e && (r.size.height = r.size.width / r.aspectRatio)),
            l + r.size.height >= r.parentData.height && (r.size.height = r.parentData.height - l, e && (r.size.width = r.size.height * r.aspectRatio))
        },
        stop: function() {
            var r = n(this).data("resizable"),
            f = r.options,
            a = r.position,
            e = r.containerOffset,
            o = r.containerPosition,
            s = r.containerElement,
            u = n(r.helper),
            h = u.offset(),
            c = u.outerWidth() - r.sizeDiff.width,
            l = u.outerHeight() - r.sizeDiff.height;
            r._helper && !f.animate && /relative/.test(s.css("position")) && n(this).css({
                left: h.left - o.left - e.left,
                width: c,
                height: l
            }),
            r._helper && !f.animate && /static/.test(s.css("position")) && n(this).css({
                left: h.left - o.left - e.left,
                width: c,
                height: l
            })
        }
    }),
    n.ui.plugin.add("resizable", "ghost", {
        start: function() {
            var r = n(this).data("resizable"),
            u = r.options,
            f = r.size;
            r.ghost = r.originalElement.clone(),
            r.ghost.css({
                opacity: .25,
                display: "block",
                position: "relative",
                height: f.height,
                width: f.width,
                margin: 0,
                left: 0,
                top: 0
            }).addClass("ui-resizable-ghost").addClass(typeof u.ghost == "string" ? u.ghost: ""),
            r.ghost.appendTo(r.helper)
        },
        resize: function() {
            var r = n(this).data("resizable"),
            u = r.options;
            r.ghost && r.ghost.css({
                position: "relative",
                height: r.size.height,
                width: r.size.width
            })
        },
        stop: function() {
            var r = n(this).data("resizable"),
            u = r.options;
            r.ghost && r.helper && r.helper.get(0).removeChild(r.ghost.get(0))
        }
    }),
    n.ui.plugin.add("resizable", "grid", {
        resize: function(t) {
            var r = n(this).data("resizable"),
            u = r.options,
            c = r.size,
            f = r.originalSize,
            s = r.originalPosition,
            h = r.axis,
            l = u._aspectRatio || t.shiftKey,
            e,
            o;
            u.grid = typeof u.grid == "number" ? [u.grid, u.grid] : u.grid,
            e = Math.round((c.width - f.width) / (u.grid[0] || 1)) * (u.grid[0] || 1),
            o = Math.round((c.height - f.height) / (u.grid[1] || 1)) * (u.grid[1] || 1),
            /^(se|s|e)$/.test(h) ? (r.size.width = f.width + e, r.size.height = f.height + o) : /^(ne)$/.test(h) ? (r.size.width = f.width + e, r.size.height = f.height + o, r.position.top = s.top - o) : /^(sw)$/.test(h) ? (r.size.width = f.width + e, r.size.height = f.height + o, r.position.left = s.left - e) : (r.size.width = f.width + e, r.size.height = f.height + o, r.position.top = s.top - o, r.position.left = s.left - e)
        }
    });
    var r = function(n) {
        return parseInt(n, 10) || 0
    },
    i = function(n) {
        return ! isNaN(parseInt(n, 10))
    }
} (jQuery),
function(n) {
    n.widget("ui.selectable", n.ui.mouse, {
        options: {
            appendTo: "body",
            autoRefresh: !0,
            distance: 0,
            filter: "*",
            tolerance: "touch"
        },
        _create: function() {
            var i = this,
            t;
            this.element.addClass("ui-selectable"),
            this.dragged = !1,
            this.refresh = function() {
                t = n(i.options.filter, i.element[0]),
                t.addClass("ui-selectee"),
                t.each(function() {
                    var t = n(this),
                    i = t.offset();
                    n.data(this, "selectable-item", {
                        element: this,
                        $element: t,
                        left: i.left,
                        top: i.top,
                        right: i.left + t.outerWidth(),
                        bottom: i.top + t.outerHeight(),
                        startselected: !1,
                        selected: t.hasClass("ui-selected"),
                        selecting: t.hasClass("ui-selecting"),
                        unselecting: t.hasClass("ui-unselecting")
                    })
                })
            },
            this.refresh(),
            this.selectees = t.addClass("ui-selectee"),
            this._mouseInit(),
            this.helper = n("<div class='ui-selectable-helper'></div>")
        },
        destroy: function() {
            return this.selectees.removeClass("ui-selectee").removeData("selectable-item"),
            this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable"),
            this._mouseDestroy(),
            this
        },
        _mouseStart: function(t) {
            var r = this,
            i;
            this.opos = [t.pageX, t.pageY],
            this.options.disabled || (i = this.options, this.selectees = n(i.filter, this.element[0]), this._trigger("start", t), n(i.appendTo).append(this.helper), this.helper.css({
                left: t.clientX,
                top: t.clientY,
                width: 0,
                height: 0
            }), i.autoRefresh && this.refresh(), this.selectees.filter(".ui-selected").each(function() {
                var i = n.data(this, "selectable-item");
                i.startselected = !0,
                !t.metaKey && !t.ctrlKey && (i.$element.removeClass("ui-selected"), i.selected = !1, i.$element.addClass("ui-unselecting"), i.unselecting = !0, r._trigger("unselecting", t, {
                    unselecting: i.element
                }))
            }), n(t.target).parents().andSelf().each(function() {
                var i = n.data(this, "selectable-item"),
                u;
                if (i) return u = !t.metaKey && !t.ctrlKey || !i.$element.hasClass("ui-selected"),
                i.$element.removeClass(u ? "ui-unselecting": "ui-selected").addClass(u ? "ui-selecting": "ui-unselecting"),
                i.unselecting = !u,
                i.selecting = u,
                i.selected = u,
                u ? r._trigger("selecting", t, {
                    selecting: i.element
                }) : r._trigger("unselecting", t, {
                    unselecting: i.element
                }),
                !1
            }))
        },
        _mouseDrag: function(t) {
            var e = this,
            o;
            if (this.dragged = !0, !this.options.disabled) {
                var s = this.options,
                i = this.opos[0],
                r = this.opos[1],
                u = t.pageX,
                f = t.pageY;
                return i > u && (o = u, u = i, i = o),
                r > f && (o = f, f = r, r = o),
                this.helper.css({
                    left: i,
                    top: r,
                    width: u - i,
                    height: f - r
                }),
                this.selectees.each(function() {
                    var o = n.data(this, "selectable-item"),
                    h; ! o || o.element == e.element[0] || (h = !1, s.tolerance == "touch" ? h = !(o.left > u || o.right < i || o.top > f || o.bottom < r) : s.tolerance == "fit" && (h = o.left > i && o.right < u && o.top > r && o.bottom < f), h ? (o.selected && (o.$element.removeClass("ui-selected"), o.selected = !1), o.unselecting && (o.$element.removeClass("ui-unselecting"), o.unselecting = !1), o.selecting || (o.$element.addClass("ui-selecting"), o.selecting = !0, e._trigger("selecting", t, {
                        selecting: o.element
                    }))) : (o.selecting && ((t.metaKey || t.ctrlKey) && o.startselected ? (o.$element.removeClass("ui-selecting"), o.selecting = !1, o.$element.addClass("ui-selected"), o.selected = !0) : (o.$element.removeClass("ui-selecting"), o.selecting = !1, o.startselected && (o.$element.addClass("ui-unselecting"), o.unselecting = !0), e._trigger("unselecting", t, {
                        unselecting: o.element
                    }))), o.selected && !t.metaKey && !t.ctrlKey && !o.startselected && (o.$element.removeClass("ui-selected"), o.selected = !1, o.$element.addClass("ui-unselecting"), o.unselecting = !0, e._trigger("unselecting", t, {
                        unselecting: o.element
                    }))))
                }),
                !1
            }
        },
        _mouseStop: function(t) {
            var i = this,
            r;
            return this.dragged = !1,
            r = this.options,
            n(".ui-unselecting", this.element[0]).each(function() {
                var r = n.data(this, "selectable-item");
                r.$element.removeClass("ui-unselecting"),
                r.unselecting = !1,
                r.startselected = !1,
                i._trigger("unselected", t, {
                    unselected: r.element
                })
            }),
            n(".ui-selecting", this.element[0]).each(function() {
                var r = n.data(this, "selectable-item");
                r.$element.removeClass("ui-selecting").addClass("ui-selected"),
                r.selecting = !1,
                r.selected = !0,
                r.startselected = !0,
                i._trigger("selected", t, {
                    selected: r.element
                })
            }),
            this._trigger("stop", t),
            this.helper.remove(),
            !1
        }
    }),
    n.extend(n.ui.selectable, {
        version: "1.8.18"
    })
} (jQuery),
function(n) {
    n.widget("ui.sortable", n.ui.mouse, {
        widgetEventPrefix: "sort",
        ready: !1,
        options: {
            appendTo: "parent",
            axis: !1,
            connectWith: !1,
            containment: !1,
            cursor: "auto",
            cursorAt: !1,
            dropOnEmpty: !0,
            forcePlaceholderSize: !1,
            forceHelperSize: !1,
            grid: !1,
            handle: !1,
            helper: "original",
            items: "> *",
            opacity: !1,
            placeholder: !1,
            revert: !1,
            scroll: !0,
            scrollSensitivity: 20,
            scrollSpeed: 20,
            scope: "default",
            tolerance: "intersect",
            zIndex: 1e3
        },
        _create: function() {
            var n = this.options;
            this.containerCache = {},
            this.element.addClass("ui-sortable"),
            this.refresh(),
            this.floating = this.items.length ? n.axis === "x" || /left|right/.test(this.items[0].item.css("float")) || /inline|table-cell/.test(this.items[0].item.css("display")) : !1,
            this.offset = this.element.offset(),
            this._mouseInit(),
            this.ready = !0
        },
        destroy: function() {
            n.Widget.prototype.destroy.call(this),
            this.element.removeClass("ui-sortable ui-sortable-disabled"),
            this._mouseDestroy();
            for (var t = this.items.length - 1; t >= 0; t--) this.items[t].item.removeData(this.widgetName + "-item");
            return this
        },
        _setOption: function(t, i) {
            t === "disabled" ? (this.options[t] = i, this.widget()[i ? "addClass": "removeClass"]("ui-sortable-disabled")) : n.Widget.prototype._setOption.apply(this, arguments)
        },
        _mouseCapture: function(t, i) {
            var f = this,
            u;
            if (this.reverting || this.options.disabled || this.options.type == "static") return ! 1;
            this._refreshItems(t);
            var r = null,
            e = this,
            o = n(t.target).parents().each(function() {
                if (n.data(this, f.widgetName + "-item") == e) return r = n(this),
                !1
            });
            return (n.data(t.target, f.widgetName + "-item") == e && (r = n(t.target)), !r) ? !1: this.options.handle && !i && (u = !1, n(this.options.handle, r).find("*").andSelf().each(function() {
                this == t.target && (u = !0)
            }), !u) ? !1: (this.currentItem = r, this._removeCurrentsFromItems(), !0)
        },
        _mouseStart: function(t, i, r) {
            var u = this.options,
            e = this,
            f;
            if (this.currentContainer = this, this.refreshPositions(), this.helper = this._createHelper(t), this._cacheHelperProportions(), this._cacheMargins(), this.scrollParent = this.helper.scrollParent(), this.offset = this.currentItem.offset(), this.offset = {
                top: this.offset.top - this.margins.top,
                left: this.offset.left - this.margins.left
            },
            this.helper.css("position", "absolute"), this.cssPosition = this.helper.css("position"), n.extend(this.offset, {
                click: {
                    left: t.pageX - this.offset.left,
                    top: t.pageY - this.offset.top
                },
                parent: this._getParentOffset(),
                relative: this._getRelativeOffset()
            }), this.originalPosition = this._generatePosition(t), this.originalPageX = t.pageX, this.originalPageY = t.pageY, u.cursorAt && this._adjustOffsetFromHelper(u.cursorAt), this.domPosition = {
                prev: this.currentItem.prev()[0],
                parent: this.currentItem.parent()[0]
            },
            this.helper[0] != this.currentItem[0] && this.currentItem.hide(), this._createPlaceholder(), u.containment && this._setContainment(), u.cursor && (n("body").css("cursor") && (this._storedCursor = n("body").css("cursor")), n("body").css("cursor", u.cursor)), u.opacity && (this.helper.css("opacity") && (this._storedOpacity = this.helper.css("opacity")), this.helper.css("opacity", u.opacity)), u.zIndex && (this.helper.css("zIndex") && (this._storedZIndex = this.helper.css("zIndex")), this.helper.css("zIndex", u.zIndex)), this.scrollParent[0] != document && this.scrollParent[0].tagName != "HTML" && (this.overflowOffset = this.scrollParent.offset()), this._trigger("start", t, this._uiHash()), this._preserveHelperProportions || this._cacheHelperProportions(), !r) for (f = this.containers.length - 1; f >= 0; f--) this.containers[f]._trigger("activate", t, e._uiHash(this));
            return n.ui.ddmanager && (n.ui.ddmanager.current = this),
            n.ui.ddmanager && !u.dropBehaviour && n.ui.ddmanager.prepareOffsets(this, t),
            this.dragging = !0,
            this.helper.addClass("ui-sortable-helper"),
            this._mouseDrag(t),
            !0
        },
        _mouseDrag: function(t) {
            var i,
            r,
            u;
            for (this.position = this._generatePosition(t), this.positionAbs = this._convertPositionTo("absolute"), this.lastPositionAbs || (this.lastPositionAbs = this.positionAbs), this.options.scroll && (i = this.options, r = !1, this.scrollParent[0] != document && this.scrollParent[0].tagName != "HTML" ? (this.overflowOffset.top + this.scrollParent[0].offsetHeight - t.pageY < i.scrollSensitivity ? this.scrollParent[0].scrollTop = r = this.scrollParent[0].scrollTop + i.scrollSpeed: t.pageY - this.overflowOffset.top < i.scrollSensitivity && (this.scrollParent[0].scrollTop = r = this.scrollParent[0].scrollTop - i.scrollSpeed), this.overflowOffset.left + this.scrollParent[0].offsetWidth - t.pageX < i.scrollSensitivity ? this.scrollParent[0].scrollLeft = r = this.scrollParent[0].scrollLeft + i.scrollSpeed: t.pageX - this.overflowOffset.left < i.scrollSensitivity && (this.scrollParent[0].scrollLeft = r = this.scrollParent[0].scrollLeft - i.scrollSpeed)) : (t.pageY - n(document).scrollTop() < i.scrollSensitivity ? r = n(document).scrollTop(n(document).scrollTop() - i.scrollSpeed) : n(window).height() - (t.pageY - n(document).scrollTop()) < i.scrollSensitivity && (r = n(document).scrollTop(n(document).scrollTop() + i.scrollSpeed)), t.pageX - n(document).scrollLeft() < i.scrollSensitivity ? r = n(document).scrollLeft(n(document).scrollLeft() - i.scrollSpeed) : n(window).width() - (t.pageX - n(document).scrollLeft()) < i.scrollSensitivity && (r = n(document).scrollLeft(n(document).scrollLeft() + i.scrollSpeed))), r !== !1 && n.ui.ddmanager && !i.dropBehaviour && n.ui.ddmanager.prepareOffsets(this, t)), this.positionAbs = this._convertPositionTo("absolute"), this.options.axis && this.options.axis == "y" || (this.helper[0].style.left = this.position.left + "px"), this.options.axis && this.options.axis == "x" || (this.helper[0].style.top = this.position.top + "px"), u = this.items.length - 1; u >= 0; u--) {
                var f = this.items[u],
                e = f.item[0],
                o = this._intersectsWithPointer(f);
                if (o && e != this.currentItem[0] && this.placeholder[o == 1 ? "next": "prev"]()[0] != e && !n.ui.contains(this.placeholder[0], e) && (this.options.type == "semi-dynamic" ? !n.ui.contains(this.element[0], e) : !0)) {
                    if (this.direction = o == 1 ? "down": "up", this.options.tolerance == "pointer" || this._intersectsWithSides(f)) this._rearrange(t, f);
                    else break;
                    this._trigger("change", t, this._uiHash());
                    break
                }
            }
            return this._contactContainers(t),
            n.ui.ddmanager && n.ui.ddmanager.drag(this, t),
            this._trigger("sort", t, this._uiHash()),
            this.lastPositionAbs = this.positionAbs,
            !1
        },
        _mouseStop: function(t, i) {
            if ( !! t) {
                if (n.ui.ddmanager && !this.options.dropBehaviour && n.ui.ddmanager.drop(this, t), this.options.revert) {
                    var r = this,
                    u = r.placeholder.offset();
                    r.reverting = !0,
                    n(this.helper).animate({
                        left: u.left - this.offset.parent.left - r.margins.left + (this.offsetParent[0] == document.body ? 0: this.offsetParent[0].scrollLeft),
                        top: u.top - this.offset.parent.top - r.margins.top + (this.offsetParent[0] == document.body ? 0: this.offsetParent[0].scrollTop)
                    },
                    parseInt(this.options.revert, 10) || 500, 
                    function() {
                        r._clear(t)
                    })
                } else this._clear(t, i);
                return ! 1
            }
        },
        cancel: function() {
            var i = this,
            t;
            if (this.dragging) for (this._mouseUp({
                target: null
            }), this.options.helper == "original" ? this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper") : this.currentItem.show(), t = this.containers.length - 1; t >= 0; t--) this.containers[t]._trigger("deactivate", null, i._uiHash(this)),
            this.containers[t].containerCache.over && (this.containers[t]._trigger("out", null, i._uiHash(this)), this.containers[t].containerCache.over = 0);
            return this.placeholder && (this.placeholder[0].parentNode && this.placeholder[0].parentNode.removeChild(this.placeholder[0]), this.options.helper != "original" && this.helper && this.helper[0].parentNode && this.helper.remove(), n.extend(this, {
                helper: null,
                dragging: !1,
                reverting: !1,
                _noFinalSort: null
            }), this.domPosition.prev ? n(this.domPosition.prev).after(this.currentItem) : n(this.domPosition.parent).prepend(this.currentItem)),
            this
        },
        serialize: function(t) {
            var r = this._getItemsAsjQuery(t && t.connected),
            i = [];
            return t = t || {},
            n(r).each(function() {
                var r = (n(t.item || this).attr(t.attribute || "id") || "").match(t.expression || /(.+)[-=_](.+)/);
                r && i.push((t.key || r[1] + "[]") + "=" + (t.key && t.expression ? r[1] : r[2]))
            }),
            !i.length && t.key && i.push(t.key + "="),
            i.join("&")
        },
        toArray: function(t) {
            var r = this._getItemsAsjQuery(t && t.connected),
            i = [];
            return t = t || {},
            r.each(function() {
                i.push(n(t.item || this).attr(t.attribute || "id") || "")
            }),
            i
        },
        _intersectsWith: function(n) {
            var t = this.positionAbs.left,
            h = t + this.helperProportions.width,
            i = this.positionAbs.top,
            c = i + this.helperProportions.height,
            r = n.left,
            f = r + n.width,
            u = n.top,
            e = u + n.height,
            o = this.offset.click.top,
            s = this.offset.click.left,
            l = i + o > u && i + o < e && t + s > r && t + s < f;
            return this.options.tolerance == "pointer" || this.options.forcePointerForContainers || this.options.tolerance != "pointer" && this.helperProportions[this.floating ? "width": "height"] > n[this.floating ? "width": "height"] ? l: r < t + this.helperProportions.width / 2 && h - this.helperProportions.width / 2 < f && u < i + this.helperProportions.height / 2 && c - this.helperProportions.height / 2 < e
        },
        _intersectsWithPointer: function(t) {
            var u = n.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, t.top, t.height),
            f = n.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, t.left, t.width),
            e = u && f,
            i = this._getDragVerticalDirection(),
            r = this._getDragHorizontalDirection();
            return e ? this.floating ? r && r == "right" || i == "down" ? 2: 1: i && (i == "down" ? 2: 1) : !1
        },
        _intersectsWithSides: function(t) {
            var u = n.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, t.top + t.height / 2, t.height),
            f = n.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, t.left + t.width / 2, t.width),
            i = this._getDragVerticalDirection(),
            r = this._getDragHorizontalDirection();
            return this.floating && r ? r == "right" && f || r == "left" && !f: i && (i == "down" && u || i == "up" && !u)
        },
        _getDragVerticalDirection: function() {
            var n = this.positionAbs.top - this.lastPositionAbs.top;
            return n != 0 && (n > 0 ? "down": "up")
        },
        _getDragHorizontalDirection: function() {
            var n = this.positionAbs.left - this.lastPositionAbs.left;
            return n != 0 && (n > 0 ? "right": "left")
        },
        refresh: function(n) {
            return this._refreshItems(n),
            this.refreshPositions(),
            this
        },
        _connectWith: function() {
            var n = this.options;
            return n.connectWith.constructor == String ? [n.connectWith] : n.connectWith
        },
        _getItemsAsjQuery: function(t) {
            var h = this,
            s = [],
            u = [],
            e = this._connectWith(),
            o,
            f,
            i,
            r;
            if (e && t) for (r = e.length - 1; r >= 0; r--) for (o = n(e[r]), f = o.length - 1; f >= 0; f--) i = n.data(o[f], this.widgetName),
            i && i != this && !i.options.disabled && u.push([n.isFunction(i.options.items) ? i.options.items.call(i.element) : n(i.options.items, i.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), i]);
            for (u.push([n.isFunction(this.options.items) ? this.options.items.call(this.element, null, {
                options: this.options,
                item: this.currentItem
            }) : n(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]), r = u.length - 1; r >= 0; r--) u[r][0].each(function() {
                s.push(this)
            });
            return n(s)
        },
        _removeCurrentsFromItems: function() {
            for (var i = this.currentItem.find(":data(" + this.widgetName + "-item)"), t, n = 0; n < this.items.length; n++) for (t = 0; t < i.length; t++) i[t] == this.items[n].item[0] && this.items.splice(n, 1)
        },
        _refreshItems: function(t) {
            var o,
            i,
            r,
            s,
            h,
            u,
            l,
            c;
            this.items = [],
            this.containers = [this];
            var a = this.items,
            v = this,
            f = [[n.isFunction(this.options.items) ? this.options.items.call(this.element[0], t, {
                item: this.currentItem
            }) : n(this.options.items, this.element), this]],
            e = this._connectWith();
            if (e && this.ready) for (r = e.length - 1; r >= 0; r--) for (o = n(e[r]), u = o.length - 1; u >= 0; u--) i = n.data(o[u], this.widgetName),
            i && i != this && !i.options.disabled && (f.push([n.isFunction(i.options.items) ? i.options.items.call(i.element[0], t, {
                item: this.currentItem
            }) : n(i.options.items, i.element), i]), this.containers.push(i));
            for (r = f.length - 1; r >= 0; r--) for (s = f[r][1], h = f[r][0], u = 0, l = h.length; u < l; u++) c = n(h[u]),
            c.data(this.widgetName + "-item", s),
            a.push({
                item: c,
                instance: s,
                width: 0,
                height: 0,
                left: 0,
                top: 0
            })
        },
        refreshPositions: function(t) {
            var r,
            f,
            i,
            u;
            for (this.offsetParent && this.helper && (this.offset.parent = this._getParentOffset()), i = this.items.length - 1; i >= 0; i--)(r = this.items[i], r.instance != this.currentContainer && this.currentContainer && r.item[0] != this.currentItem[0]) || (f = this.options.toleranceElement ? n(this.options.toleranceElement, r.item) : r.item, t || (r.width = f.outerWidth(), r.height = f.outerHeight()), u = f.offset(), r.left = u.left, r.top = u.top);
            if (this.options.custom && this.options.custom.refreshContainers) this.options.custom.refreshContainers.call(this);
            else for (i = this.containers.length - 1; i >= 0; i--) u = this.containers[i].element.offset(),
            this.containers[i].containerCache.left = u.left,
            this.containers[i].containerCache.top = u.top,
            this.containers[i].containerCache.width = this.containers[i].element.outerWidth(),
            this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
            return this
        },
        _createPlaceholder: function(t) {
            var i = t || this,
            r = i.options,
            u;
            r.placeholder && r.placeholder.constructor != String || (u = r.placeholder, r.placeholder = {
                element: function() {
                    var t = n(document.createElement(i.currentItem[0].nodeName)).addClass(u || i.currentItem[0].className + " ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];
                    return u || (t.style.visibility = "hidden"),
                    t
                },
                update: function(n, t) {
                    u && !r.forcePlaceholderSize || (t.height() || t.height(i.currentItem.innerHeight() - parseInt(i.currentItem.css("paddingTop") || 0, 10) - parseInt(i.currentItem.css("paddingBottom") || 0, 10)), t.width() || t.width(i.currentItem.innerWidth() - parseInt(i.currentItem.css("paddingLeft") || 0, 10) - parseInt(i.currentItem.css("paddingRight") || 0, 10)))
                }
            }),
            i.placeholder = n(r.placeholder.element.call(i.element, i.currentItem)),
            i.currentItem.after(i.placeholder),
            r.placeholder.update(i, i.placeholder)
        },
        _contactContainers: function(t) {
            for (var f = null, i = null, u, o, r = this.containers.length - 1; r >= 0; r--) if (!n.ui.contains(this.currentItem[0], this.containers[r].element[0])) if (this._intersectsWith(this.containers[r].containerCache)) {
                if (f && n.ui.contains(this.containers[r].element[0], f.element[0])) continue;
                f = this.containers[r],
                i = r
            } else this.containers[r].containerCache.over && (this.containers[r]._trigger("out", t, this._uiHash(this)), this.containers[r].containerCache.over = 0);
            if ( !! f) if (this.containers.length === 1) this.containers[i]._trigger("over", t, this._uiHash(this)),
            this.containers[i].containerCache.over = 1;
            else if (this.currentContainer != this.containers[i]) {
                var s = 1e4,
                e = null,
                h = this.positionAbs[this.containers[i].floating ? "left": "top"];
                for (u = this.items.length - 1; u >= 0; u--) n.ui.contains(this.containers[i].element[0], this.items[u].item[0]) && (o = this.items[u][this.containers[i].floating ? "left": "top"], Math.abs(o - h) < s && (s = Math.abs(o - h), e = this.items[u]));
                if (!e && !this.options.dropOnEmpty) return;
                this.currentContainer = this.containers[i],
                e ? this._rearrange(t, e, null, !0) : this._rearrange(t, null, this.containers[i].element, !0),
                this._trigger("change", t, this._uiHash()),
                this.containers[i]._trigger("change", t, this._uiHash(this)),
                this.options.placeholder.update(this.currentContainer, this.placeholder),
                this.containers[i]._trigger("over", t, this._uiHash(this)),
                this.containers[i].containerCache.over = 1
            }
        },
        _createHelper: function(t) {
            var r = this.options,
            i = n.isFunction(r.helper) ? n(r.helper.apply(this.element[0], [t, this.currentItem])) : r.helper == "clone" ? this.currentItem.clone() : this.currentItem;
            return i.parents("body").length || n(r.appendTo != "parent" ? r.appendTo: this.currentItem[0].parentNode)[0].appendChild(i[0]),
            i[0] == this.currentItem[0] && (this._storedCSS = {
                width: this.currentItem[0].style.width,
                height: this.currentItem[0].style.height,
                position: this.currentItem.css("position"),
                top: this.currentItem.css("top"),
                left: this.currentItem.css("left")
            }),
            (i[0].style.width == "" || r.forceHelperSize) && i.width(this.currentItem.width()),
            (i[0].style.height == "" || r.forceHelperSize) && i.height(this.currentItem.height()),
            i
        },
        _adjustOffsetFromHelper: function(t) {
            typeof t == "string" && (t = t.split(" ")),
            n.isArray(t) && (t = {
                left: +t[0],
                top: +t[1] || 0
            }),
            "left" in t && (this.offset.click.left = t.left + this.margins.left),
            "right" in t && (this.offset.click.left = this.helperProportions.width - t.right + this.margins.left),
            "top" in t && (this.offset.click.top = t.top + this.margins.top),
            "bottom" in t && (this.offset.click.top = this.helperProportions.height - t.bottom + this.margins.top)
        },
        _getParentOffset: function() {
            this.offsetParent = this.helper.offsetParent();
            var t = this.offsetParent.offset();
            return this.cssPosition == "absolute" && this.scrollParent[0] != document && n.ui.contains(this.scrollParent[0], this.offsetParent[0]) && (t.left += this.scrollParent.scrollLeft(), t.top += this.scrollParent.scrollTop()),
            (this.offsetParent[0] == document.body || this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == "html" && n.browser.msie) && (t = {
                top: 0,
                left: 0
            }),
            {
                top: t.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                left: t.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
            }
        },
        _getRelativeOffset: function() {
            if (this.cssPosition == "relative") {
                var n = this.currentItem.position();
                return {
                    top: n.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
                    left: n.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
                }
            }
            return {
                top: 0,
                left: 0
            }
        },
        _cacheMargins: function() {
            this.margins = {
                left: parseInt(this.currentItem.css("marginLeft"), 10) || 0,
                top: parseInt(this.currentItem.css("marginTop"), 10) || 0
            }
        },
        _cacheHelperProportions: function() {
            this.helperProportions = {
                width: this.helper.outerWidth(),
                height: this.helper.outerHeight()
            }
        },
        _setContainment: function() {
            var i = this.options;
            if (i.containment == "parent" && (i.containment = this.helper[0].parentNode), (i.containment == "document" || i.containment == "window") && (this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, n(i.containment == "document" ? document: window).width() - this.helperProportions.width - this.margins.left, (n(i.containment == "document" ? document: window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]), !/^(document|window|parent)$/.test(i.containment)) {
                var t = n(i.containment)[0],
                r = n(i.containment).offset(),
                u = n(t).css("overflow") != "hidden";
                this.containment = [r.left + (parseInt(n(t).css("borderLeftWidth"), 10) || 0) + (parseInt(n(t).css("paddingLeft"), 10) || 0) - this.margins.left, r.top + (parseInt(n(t).css("borderTopWidth"), 10) || 0) + (parseInt(n(t).css("paddingTop"), 10) || 0) - this.margins.top, r.left + (u ? Math.max(t.scrollWidth, t.offsetWidth) : t.offsetWidth) - (parseInt(n(t).css("borderLeftWidth"), 10) || 0) - (parseInt(n(t).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, r.top + (u ? Math.max(t.scrollHeight, t.offsetHeight) : t.offsetHeight) - (parseInt(n(t).css("borderTopWidth"), 10) || 0) - (parseInt(n(t).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top]
            }
        },
        _convertPositionTo: function(t, i) {
            i || (i = this.position);
            var r = t == "absolute" ? 1: -1,
            e = this.options,
            u = this.cssPosition == "absolute" && (this.scrollParent[0] == document || !n.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent: this.scrollParent,
            f = /(html|body)/i.test(u[0].tagName);
            return {
                top: i.top + this.offset.relative.top * r + this.offset.parent.top * r - (n.browser.safari && this.cssPosition == "fixed" ? 0: (this.cssPosition == "fixed" ? -this.scrollParent.scrollTop() : f ? 0: u.scrollTop()) * r),
                left: i.left + this.offset.relative.left * r + this.offset.parent.left * r - (n.browser.safari && this.cssPosition == "fixed" ? 0: (this.cssPosition == "fixed" ? -this.scrollParent.scrollLeft() : f ? 0: u.scrollLeft()) * r)
            }
        },
        _generatePosition: function(t) {
            var i = this.options,
            o = this.cssPosition == "absolute" && (this.scrollParent[0] == document || !n.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent: this.scrollParent,
            s = /(html|body)/i.test(o[0].tagName),
            f,
            e,
            r,
            u;
            return this.cssPosition == "relative" && (this.scrollParent[0] == document || this.scrollParent[0] == this.offsetParent[0]) && (this.offset.relative = this._getRelativeOffset()),
            f = t.pageX,
            e = t.pageY,
            this.originalPosition && (this.containment && (t.pageX - this.offset.click.left < this.containment[0] && (f = this.containment[0] + this.offset.click.left), t.pageY - this.offset.click.top < this.containment[1] && (e = this.containment[1] + this.offset.click.top), t.pageX - this.offset.click.left > this.containment[2] && (f = this.containment[2] + this.offset.click.left), t.pageY - this.offset.click.top > this.containment[3] && (e = this.containment[3] + this.offset.click.top)), i.grid && (r = this.originalPageY + Math.round((e - this.originalPageY) / i.grid[1]) * i.grid[1], e = this.containment ? r - this.offset.click.top < this.containment[1] || r - this.offset.click.top > this.containment[3] ? r - this.offset.click.top < this.containment[1] ? r + i.grid[1] : r - i.grid[1] : r: r, u = this.originalPageX + Math.round((f - this.originalPageX) / i.grid[0]) * i.grid[0], f = this.containment ? u - this.offset.click.left < this.containment[0] || u - this.offset.click.left > this.containment[2] ? u - this.offset.click.left < this.containment[0] ? u + i.grid[0] : u - i.grid[0] : u: u)),
            {
                top: e - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + (n.browser.safari && this.cssPosition == "fixed" ? 0: this.cssPosition == "fixed" ? -this.scrollParent.scrollTop() : s ? 0: o.scrollTop()),
                left: f - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + (n.browser.safari && this.cssPosition == "fixed" ? 0: this.cssPosition == "fixed" ? -this.scrollParent.scrollLeft() : s ? 0: o.scrollLeft())
            }
        },
        _rearrange: function(n, t, i, r) {
            i ? i[0].appendChild(this.placeholder[0]) : t.item[0].parentNode.insertBefore(this.placeholder[0], this.direction == "down" ? t.item[0] : t.item[0].nextSibling),
            this.counter = this.counter ? ++this.counter: 1;
            var u = this,
            f = this.counter;
            window.setTimeout(function() {
                f == u.counter && u.refreshPositions(!r)
            },
            0)
        },
        _clear: function(t, i) {
            var u,
            f,
            r;
            if (this.reverting = !1, u = [], f = this, !this._noFinalSort && this.currentItem.parent().length && this.placeholder.before(this.currentItem), this._noFinalSort = null, this.helper[0] == this.currentItem[0]) {
                for (r in this._storedCSS)(this._storedCSS[r] == "auto" || this._storedCSS[r] == "static") && (this._storedCSS[r] = "");
                this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")
            } else this.currentItem.show();
            if (this.fromOutside && !i && u.push(function(n) {
                this._trigger("receive", n, this._uiHash(this.fromOutside))
            }), (this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !i && u.push(function(n) {
                this._trigger("update", n, this._uiHash())
            }), !n.ui.contains(this.element[0], this.currentItem[0])) for (i || u.push(function(n) {
                this._trigger("remove", n, this._uiHash())
            }), r = this.containers.length - 1; r >= 0; r--) n.ui.contains(this.containers[r].element[0], this.currentItem[0]) && !i && (u.push(function(n) {
                return function(t) {
                    n._trigger("receive", t, this._uiHash(this))
                }
            }.call(this, this.containers[r])), u.push(function(n) {
                return function(t) {
                    n._trigger("update", t, this._uiHash(this))
                }
            }.call(this, this.containers[r])));
            for (r = this.containers.length - 1; r >= 0; r--) i || u.push(function(n) {
                return function(t) {
                    n._trigger("deactivate", t, this._uiHash(this))
                }
            }.call(this, this.containers[r])),
            this.containers[r].containerCache.over && (u.push(function(n) {
                return function(t) {
                    n._trigger("out", t, this._uiHash(this))
                }
            }.call(this, this.containers[r])), this.containers[r].containerCache.over = 0);
            if (this._storedCursor && n("body").css("cursor", this._storedCursor), this._storedOpacity && this.helper.css("opacity", this._storedOpacity), this._storedZIndex && this.helper.css("zIndex", this._storedZIndex == "auto" ? "": this._storedZIndex), this.dragging = !1, this.cancelHelperRemoval) {
                if (!i) {
                    for (this._trigger("beforeStop", t, this._uiHash()), r = 0; r < u.length; r++) u[r].call(this, t);
                    this._trigger("stop", t, this._uiHash())
                }
                return ! 1
            }
            if (i || this._trigger("beforeStop", t, this._uiHash()), this.placeholder[0].parentNode.removeChild(this.placeholder[0]), this.helper[0] != this.currentItem[0] && this.helper.remove(), this.helper = null, !i) {
                for (r = 0; r < u.length; r++) u[r].call(this, t);
                this._trigger("stop", t, this._uiHash())
            }
            return this.fromOutside = !1,
            !0
        },
        _trigger: function() {
            n.Widget.prototype._trigger.apply(this, arguments) === !1 && this.cancel()
        },
        _uiHash: function(t) {
            var i = t || this;
            return {
                helper: i.helper,
                placeholder: i.placeholder || n([]),
                position: i.position,
                originalPosition: i.originalPosition,
                offset: i.positionAbs,
                item: i.currentItem,
                sender: t ? t.element: null
            }
        }
    }),
    n.extend(n.ui.sortable, {
        version: "1.8.18"
    })
} (jQuery),
jQuery.effects || 
function(n, t) {
    function r(t) {
        return ! t || typeof t == "number" || n.fx.speeds[t] ? !0: typeof t == "string" && !n.effects[t] ? !0: !1
    }
    function i(t, i, r, u) {
        return typeof t == "object" && (u = i, r = null, i = t, t = i.effect),
        n.isFunction(i) && (u = i, r = null, i = {}),
        (typeof i == "number" || n.fx.speeds[i]) && (u = r, r = i, i = {}),
        n.isFunction(r) && (u = r, r = null),
        i = i || {},
        r = r || i.duration,
        r = n.fx.off ? 0: typeof r == "number" ? r: r in n.fx.speeds ? n.fx.speeds[r] : n.fx.speeds._default,
        u = u || i.complete,
        [t, i, r, u]
    }
    function h(n, t) {
        var r = {
            _: 0
        },
        i;
        for (i in t) n[i] != t[i] && (r[i] = t[i]);
        return r
    }
    function u(t) {
        var i,
        r;
        for (i in t) r = t[i],
        (r == null || n.isFunction(r) || i in l || /scrollbar/.test(i) || !/color/i.test(i) && isNaN(parseFloat(r))) && delete t[i];
        return t
    }
    function f() {
        var n = document.defaultView ? document.defaultView.getComputedStyle(this, null) : this.currentStyle,
        i = {},
        t,
        u,
        r;
        if (n && n.length && n[0] && n[n[0]]) for (r = n.length; r--;) t = n[r],
        typeof n[t] == "string" && (u = t.replace(/\-(\w)/g, 
        function(n, t) {
            return t.toUpperCase()
        }), i[u] = n[t]);
        else for (t in n) typeof n[t] == "string" && (i[t] = n[t]);
        return i
    }
    function c(t, i) {
        var r;
        do {
            if (r = n.curCSS(t, i), r != "" && r != "transparent" || n.nodeName(t, "body")) break;
            i = "backgroundColor"
        }
        while (t = t.parentNode);
        return e(r)
    }
    function e(t) {
        var i;
        return t && t.constructor == Array && t.length == 3 ? t: (i = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(t)) ? [parseInt(i[1], 10), parseInt(i[2], 10), parseInt(i[3], 10)] : (i = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(t)) ? [parseFloat(i[1]) * 2.55, parseFloat(i[2]) * 2.55, parseFloat(i[3]) * 2.55] : (i = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(t)) ? [parseInt(i[1], 16), parseInt(i[2], 16), parseInt(i[3], 16)] : (i = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(t)) ? [parseInt(i[1] + i[1], 16), parseInt(i[2] + i[2], 16), parseInt(i[3] + i[3], 16)] : (i = /rgba\(0, 0, 0, 0\)/.exec(t)) ? o.transparent: o[n.trim(t).toLowerCase()]
    }
    n.effects = {},
    n.each(["backgroundColor", "borderBottomColor", "borderLeftColor", "borderRightColor", "borderTopColor", "borderColor", "color", "outlineColor"], 
    function(t, i) {
        n.fx.step[i] = function(n) {
            n.colorInit || (n.start = c(n.elem, i), n.end = e(n.end), n.colorInit = !0),
            n.elem.style[i] = "rgb(" + Math.max(Math.min(parseInt(n.pos * (n.end[0] - n.start[0]) + n.start[0], 10), 255), 0) + "," + Math.max(Math.min(parseInt(n.pos * (n.end[1] - n.start[1]) + n.start[1], 10), 255), 0) + "," + Math.max(Math.min(parseInt(n.pos * (n.end[2] - n.start[2]) + n.start[2], 10), 255), 0) + ")"
        }
    });
    var o = {
        aqua: [0, 255, 255],
        azure: [240, 255, 255],
        beige: [245, 245, 220],
        black: [0, 0, 0],
        blue: [0, 0, 255],
        brown: [165, 42, 42],
        cyan: [0, 255, 255],
        darkblue: [0, 0, 139],
        darkcyan: [0, 139, 139],
        darkgrey: [169, 169, 169],
        darkgreen: [0, 100, 0],
        darkkhaki: [189, 183, 107],
        darkmagenta: [139, 0, 139],
        darkolivegreen: [85, 107, 47],
        darkorange: [255, 140, 0],
        darkorchid: [153, 50, 204],
        darkred: [139, 0, 0],
        darksalmon: [233, 150, 122],
        darkviolet: [148, 0, 211],
        fuchsia: [255, 0, 255],
        gold: [255, 215, 0],
        green: [0, 128, 0],
        indigo: [75, 0, 130],
        khaki: [240, 230, 140],
        lightblue: [173, 216, 230],
        lightcyan: [224, 255, 255],
        lightgreen: [144, 238, 144],
        lightgrey: [211, 211, 211],
        lightpink: [255, 182, 193],
        lightyellow: [255, 255, 224],
        lime: [0, 255, 0],
        magenta: [255, 0, 255],
        maroon: [128, 0, 0],
        navy: [0, 0, 128],
        olive: [128, 128, 0],
        orange: [255, 165, 0],
        pink: [255, 192, 203],
        purple: [128, 0, 128],
        violet: [128, 0, 128],
        red: [255, 0, 0],
        silver: [192, 192, 192],
        white: [255, 255, 255],
        yellow: [255, 255, 0],
        transparent: [255, 255, 255]
    },
    s = ["add", "remove", "toggle"],
    l = {
        border: 1,
        borderBottom: 1,
        borderColor: 1,
        borderLeft: 1,
        borderRight: 1,
        borderTop: 1,
        borderWidth: 1,
        margin: 1,
        padding: 1
    };
    n.effects.animateClass = function(t, i, r, e) {
        return n.isFunction(r) && (e = r, r = null),
        this.queue(function() {
            var o = n(this),
            c = o.attr("style") || " ",
            a = u(f.call(this)),
            l,
            v = o.attr("class");
            n.each(s, 
            function(n, i) {
                t[i] && o[i + "Class"](t[i])
            }),
            l = u(f.call(this)),
            o.attr("class", v),
            o.animate(h(a, l), {
                queue: !1,
                duration: i,
                easing: r,
                complete: function() {
                    n.each(s, 
                    function(n, i) {
                        t[i] && o[i + "Class"](t[i])
                    }),
                    typeof o.attr("style") == "object" ? (o.attr("style").cssText = "", o.attr("style").cssText = c) : o.attr("style", c),
                    e && e.apply(this, arguments),
                    n.dequeue(this)
                }
            })
        })
    },
    n.fn.extend({
        _addClass: n.fn.addClass,
        addClass: function(t, i, r, u) {
            return i ? n.effects.animateClass.apply(this, [{
                add: t
            },
            i, r, u]) : this._addClass(t)
        },
        _removeClass: n.fn.removeClass,
        removeClass: function(t, i, r, u) {
            return i ? n.effects.animateClass.apply(this, [{
                remove: t
            },
            i, r, u]) : this._removeClass(t)
        },
        _toggleClass: n.fn.toggleClass,
        toggleClass: function(i, r, u, f, e) {
            return typeof r == "boolean" || r === t ? u ? n.effects.animateClass.apply(this, [r ? {
                add: i
            }: {
                remove: i
            },
            u, f, e]) : this._toggleClass(i, r) : n.effects.animateClass.apply(this, [{
                toggle: i
            },
            r, u, f])
        },
        switchClass: function(t, i, r, u, f) {
            return n.effects.animateClass.apply(this, [{
                add: i,
                remove: t
            },
            r, u, f])
        }
    }),
    n.extend(n.effects, {
        version: "1.8.18",
        save: function(n, t) {
            for (var i = 0; i < t.length; i++) t[i] !== null && n.data("ec.storage." + t[i], n[0].style[t[i]])
        },
        restore: function(n, t) {
            for (var i = 0; i < t.length; i++) t[i] !== null && n.css(t[i], n.data("ec.storage." + t[i]))
        },
        setMode: function(n, t) {
            return t == "toggle" && (t = n.is(":hidden") ? "show": "hide"),
            t
        },
        getBaseline: function(n, t) {
            var i,
            r;
            switch (n[0]) {
            case "top":
                i = 0;
                break;
            case "middle":
                i = .5;
                break;
            case "bottom":
                i = 1;
                break;
            default:
                i = n[0] / t.height
            }
            switch (n[1]) {
            case "left":
                r = 0;
                break;
            case "center":
                r = .5;
                break;
            case "right":
                r = 1;
                break;
            default:
                r = n[1] / t.width
            }
            return {
                x: r,
                y: i
            }
        },
        createWrapper: function(t) {
            if (t.parent().is(".ui-effects-wrapper")) return t.parent();
            var i = {
                width: t.outerWidth(!0),
                height: t.outerHeight(!0),
                float: t.css("float")
            },
            r = n("<div></div>").addClass("ui-effects-wrapper").css({
                fontSize: "100%",
                background: "transparent",
                border: "none",
                margin: 0,
                padding: 0
            }),
            u = document.activeElement;
            return t.wrap(r),
            (t[0] === u || n.contains(t[0], u)) && n(u).focus(),
            r = t.parent(),
            t.css("position") == "static" ? (r.css({
                position: "relative"
            }), t.css({
                position: "relative"
            })) : (n.extend(i, {
                position: t.css("position"),
                zIndex: t.css("z-index")
            }), n.each(["top", "left", "bottom", "right"], 
            function(n, r) {
                i[r] = t.css(r),
                isNaN(parseInt(i[r], 10)) && (i[r] = "auto")
            }), t.css({
                position: "relative",
                top: 0,
                left: 0,
                right: "auto",
                bottom: "auto"
            })),
            r.css(i).show()
        },
        removeWrapper: function(t) {
            var r,
            i = document.activeElement;
            return t.parent().is(".ui-effects-wrapper") ? (r = t.parent().replaceWith(t), (t[0] === i || n.contains(t[0], i)) && n(i).focus(), r) : t
        },
        setTransition: function(t, i, r, u) {
            return u = u || {},
            n.each(i, 
            function(n, i) {
                unit = t.cssUnit(i),
                unit[0] > 0 && (u[i] = unit[0] * r + unit[1])
            }),
            u
        }
    }),
    n.fn.extend({
        effect: function(t) {
            var o = i.apply(this, arguments),
            e = {
                options: o[1],
                duration: o[2],
                callback: o[3]
            },
            s = e.options.mode,
            h = n.effects[t];
            return n.fx.off || !h ? s ? this[s](e.duration, e.callback) : this.each(function() {
                e.callback && e.callback.call(this)
            }) : h.call(this, e)
        },
        _show: n.fn.show,
        show: function(n) {
            if (r(n)) return this._show.apply(this, arguments);
            var t = i.apply(this, arguments);
            return t[1].mode = "show",
            this.effect.apply(this, t)
        },
        _hide: n.fn.hide,
        hide: function(n) {
            if (r(n)) return this._hide.apply(this, arguments);
            var t = i.apply(this, arguments);
            return t[1].mode = "hide",
            this.effect.apply(this, t)
        },
        __toggle: n.fn.toggle,
        toggle: function(t) {
            if (r(t) || typeof t == "boolean" || n.isFunction(t)) return this.__toggle.apply(this, arguments);
            var u = i.apply(this, arguments);
            return u[1].mode = "toggle",
            this.effect.apply(this, u)
        },
        cssUnit: function(t) {
            var i = this.css(t),
            r = [];
            return n.each(["em", "px", "%", "pt"], 
            function(n, t) {
                i.indexOf(t) > 0 && (r = [parseFloat(i), t])
            }),
            r
        }
    }),
    n.easing.jswing = n.easing.swing,
    n.extend(n.easing, {
        def: "easeOutQuad",
        swing: function(t, i, r, u, f) {
            return n.easing[n.easing.def](t, i, r, u, f)
        },
        easeInQuad: function(n, t, i, r, u) {
            return r * (t /= u) * t + i
        },
        easeOutQuad: function(n, t, i, r, u) {
            return - r * (t /= u) * (t - 2) + i
        },
        easeInOutQuad: function(n, t, i, r, u) {
            return (t /= u / 2) < 1 ? r / 2 * t * t + i: -r / 2 * (--t * (t - 2) - 1) + i
        },
        easeInCubic: function(n, t, i, r, u) {
            return r * (t /= u) * t * t + i
        },
        easeOutCubic: function(n, t, i, r, u) {
            return r * ((t = t / u - 1) * t * t + 1) + i
        },
        easeInOutCubic: function(n, t, i, r, u) {
            return (t /= u / 2) < 1 ? r / 2 * t * t * t + i: r / 2 * ((t -= 2) * t * t + 2) + i
        },
        easeInQuart: function(n, t, i, r, u) {
            return r * (t /= u) * t * t * t + i
        },
        easeOutQuart: function(n, t, i, r, u) {
            return - r * ((t = t / u - 1) * t * t * t - 1) + i
        },
        easeInOutQuart: function(n, t, i, r, u) {
            return (t /= u / 2) < 1 ? r / 2 * t * t * t * t + i: -r / 2 * ((t -= 2) * t * t * t - 2) + i
        },
        easeInQuint: function(n, t, i, r, u) {
            return r * (t /= u) * t * t * t * t + i
        },
        easeOutQuint: function(n, t, i, r, u) {
            return r * ((t = t / u - 1) * t * t * t * t + 1) + i
        },
        easeInOutQuint: function(n, t, i, r, u) {
            return (t /= u / 2) < 1 ? r / 2 * t * t * t * t * t + i: r / 2 * ((t -= 2) * t * t * t * t + 2) + i
        },
        easeInSine: function(n, t, i, r, u) {
            return - r * Math.cos(t / u * (Math.PI / 2)) + r + i
        },
        easeOutSine: function(n, t, i, r, u) {
            return r * Math.sin(t / u * (Math.PI / 2)) + i
        },
        easeInOutSine: function(n, t, i, r, u) {
            return - r / 2 * (Math.cos(Math.PI * t / u) - 1) + i
        },
        easeInExpo: function(n, t, i, r, u) {
            return t == 0 ? i: r * Math.pow(2, 10 * (t / u - 1)) + i
        },
        easeOutExpo: function(n, t, i, r, u) {
            return t == u ? i + r: r * ( - Math.pow(2, -10 * t / u) + 1) + i
        },
        easeInOutExpo: function(n, t, i, r, u) {
            return t == 0 ? i: t == u ? i + r: (t /= u / 2) < 1 ? r / 2 * Math.pow(2, 10 * (t - 1)) + i: r / 2 * ( - Math.pow(2, -10 * --t) + 2) + i
        },
        easeInCirc: function(n, t, i, r, u) {
            return - r * (Math.sqrt(1 - (t /= u) * t) - 1) + i
        },
        easeOutCirc: function(n, t, i, r, u) {
            return r * Math.sqrt(1 - (t = t / u - 1) * t) + i
        },
        easeInOutCirc: function(n, t, i, r, u) {
            return (t /= u / 2) < 1 ? -r / 2 * (Math.sqrt(1 - t * t) - 1) + i: r / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + i
        },
        easeInElastic: function(n, t, i, r, u) {
            var o = 1.70158,
            f = 0,
            e = r;
            return t == 0 ? i: (t /= u) == 1 ? i + r: (f || (f = u * .3), e < Math.abs(r) ? (e = r, o = f / 4) : o = f / (2 * Math.PI) * Math.asin(r / e), -(e * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * u - o) * 2 * Math.PI / f)) + i)
        },
        easeOutElastic: function(n, t, i, r, u) {
            var o = 1.70158,
            f = 0,
            e = r;
            return t == 0 ? i: (t /= u) == 1 ? i + r: (f || (f = u * .3), e < Math.abs(r) ? (e = r, o = f / 4) : o = f / (2 * Math.PI) * Math.asin(r / e), e * Math.pow(2, -10 * t) * Math.sin((t * u - o) * 2 * Math.PI / f) + r + i)
        },
        easeInOutElastic: function(n, t, i, r, u) {
            var o = 1.70158,
            f = 0,
            e = r;
            return t == 0 ? i: (t /= u / 2) == 2 ? i + r: (f || (f = u * .3 * 1.5), e < Math.abs(r) ? (e = r, o = f / 4) : o = f / (2 * Math.PI) * Math.asin(r / e), t < 1) ? -.5 * e * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * u - o) * 2 * Math.PI / f) + i: e * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * u - o) * 2 * Math.PI / f) * .5 + r + i
        },
        easeInBack: function(n, i, r, u, f, e) {
            return e == t && (e = 1.70158),
            u * (i /= f) * i * ((e + 1) * i - e) + r
        },
        easeOutBack: function(n, i, r, u, f, e) {
            return e == t && (e = 1.70158),
            u * ((i = i / f - 1) * i * ((e + 1) * i + e) + 1) + r
        },
        easeInOutBack: function(n, i, r, u, f, e) {
            return (e == t && (e = 1.70158), (i /= f / 2) < 1) ? u / 2 * i * i * (((e *= 1.525) + 1) * i - e) + r: u / 2 * ((i -= 2) * i * (((e *= 1.525) + 1) * i + e) + 2) + r
        },
        easeInBounce: function(t, i, r, u, f) {
            return u - n.easing.easeOutBounce(t, f - i, 0, u, f) + r
        },
        easeOutBounce: function(n, t, i, r, u) {
            return (t /= u) < 1 / 2.75 ? r * 7.5625 * t * t + i: t < 2 / 2.75 ? r * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + i: t < 2.5 / 2.75 ? r * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + i: r * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + i
        },
        easeInOutBounce: function(t, i, r, u, f) {
            return i < f / 2 ? n.easing.easeInBounce(t, i * 2, 0, u, f) * .5 + r: n.easing.easeOutBounce(t, i * 2 - f, 0, u, f) * .5 + u * .5 + r
        }
    })
} (jQuery),
function(n) {
    n.effects.blind = function(t) {
        return this.queue(function() {
            var i = n(this),
            e = ["position", "top", "bottom", "left", "right"],
            u = n.effects.setMode(i, t.options.mode || "hide"),
            o = t.options.direction || "vertical",
            f;
            n.effects.save(i, e),
            i.show();
            var r = n.effects.createWrapper(i).css({
                overflow: "hidden"
            }),
            s = o == "vertical" ? "height": "width",
            h = o == "vertical" ? r.height() : r.width();
            u == "show" && r.css(s, 0),
            f = {},
            f[s] = u == "show" ? h: 0,
            r.animate(f, t.duration, t.options.easing, 
            function() {
                u == "hide" && i.hide(),
                n.effects.restore(i, e),
                n.effects.removeWrapper(i),
                t.callback && t.callback.apply(i[0], arguments),
                i.dequeue()
            })
        })
    }
} (jQuery),
function(n) {
    n.effects.bounce = function(t) {
        return this.queue(function() {
            var i = n(this),
            l = ["position", "top", "bottom", "left", "right"],
            f = n.effects.setMode(i, t.options.mode || "effect"),
            a = t.options.direction || "up",
            r = t.options.distance || 20,
            v = t.options.times || 5,
            o = t.duration || 250,
            y,
            s,
            h,
            c;
            /show|hide/.test(f) && l.push("opacity"),
            n.effects.save(i, l),
            i.show(),
            n.effects.createWrapper(i);
            var u = a == "up" || a == "down" ? "top": "left",
            e = a == "up" || a == "left" ? "pos": "neg",
            r = t.options.distance || (u == "top" ? i.outerHeight({
                margin: !0
            }) / 3: i.outerWidth({
                margin: !0
            }) / 3);
            for (f == "show" && i.css("opacity", 0).css(u, e == "pos" ? -r: r), f == "hide" && (r = r / (v * 2)), f != "hide" && v--, f == "show" && (s = {
                opacity: 1
            },
            s[u] = (e == "pos" ? "+=": "-=") + r, i.animate(s, o / 2, t.options.easing), r = r / 2, v--), y = 0; y < v; y++) h = {},
            c = {},
            h[u] = (e == "pos" ? "-=": "+=") + r,
            c[u] = (e == "pos" ? "+=": "-=") + r,
            i.animate(h, o / 2, t.options.easing).animate(c, o / 2, t.options.easing),
            r = f == "hide" ? r * 2: r / 2;
            f == "hide" ? (s = {
                opacity: 0
            },
            s[u] = (e == "pos" ? "-=": "+=") + r, i.animate(s, o / 2, t.options.easing, 
            function() {
                i.hide(),
                n.effects.restore(i, l),
                n.effects.removeWrapper(i),
                t.callback && t.callback.apply(this, arguments)
            })) : (h = {},
            c = {},
            h[u] = (e == "pos" ? "-=": "+=") + r, c[u] = (e == "pos" ? "+=": "-=") + r, i.animate(h, o / 2, t.options.easing).animate(c, o / 2, t.options.easing, 
            function() {
                n.effects.restore(i, l),
                n.effects.removeWrapper(i),
                t.callback && t.callback.apply(this, arguments)
            })),
            i.queue("fx", 
            function() {
                i.dequeue()
            }),
            i.dequeue()
        })
    }
} (jQuery),
function(n) {
    n.effects.clip = function(t) {
        return this.queue(function() {
            var i = n(this),
            h = ["position", "top", "bottom", "left", "right", "height", "width"],
            u = n.effects.setMode(i, t.options.mode || "hide"),
            o = t.options.direction || "vertical",
            e;
            n.effects.save(i, h),
            i.show();
            var c = n.effects.createWrapper(i).css({
                overflow: "hidden"
            }),
            r = i[0].tagName == "IMG" ? c: i,
            f = {
                size: o == "vertical" ? "height": "width",
                position: o == "vertical" ? "top": "left"
            },
            s = o == "vertical" ? r.height() : r.width();
            u == "show" && (r.css(f.size, 0), r.css(f.position, s / 2)),
            e = {},
            e[f.size] = u == "show" ? s: 0,
            e[f.position] = u == "show" ? 0: s / 2,
            r.animate(e, {
                queue: !1,
                duration: t.duration,
                easing: t.options.easing,
                complete: function() {
                    u == "hide" && i.hide(),
                    n.effects.restore(i, h),
                    n.effects.removeWrapper(i),
                    t.callback && t.callback.apply(i[0], arguments),
                    i.dequeue()
                }
            })
        })
    }
} (jQuery),
function(n) {
    n.effects.drop = function(t) {
        return this.queue(function() {
            var i = n(this),
            h = ["position", "top", "bottom", "left", "right", "opacity"],
            r = n.effects.setMode(i, t.options.mode || "hide"),
            u = t.options.direction || "left",
            s;
            n.effects.save(i, h),
            i.show(),
            n.effects.createWrapper(i);
            var f = u == "up" || u == "down" ? "top": "left",
            e = u == "up" || u == "left" ? "pos": "neg",
            o = t.options.distance || (f == "top" ? i.outerHeight({
                margin: !0
            }) / 2: i.outerWidth({
                margin: !0
            }) / 2);
            r == "show" && i.css("opacity", 0).css(f, e == "pos" ? -o: o),
            s = {
                opacity: r == "show" ? 1: 0
            },
            s[f] = (r == "show" ? e == "pos" ? "+=": "-=": e == "pos" ? "-=": "+=") + o,
            i.animate(s, {
                queue: !1,
                duration: t.duration,
                easing: t.options.easing,
                complete: function() {
                    r == "hide" && i.hide(),
                    n.effects.restore(i, h),
                    n.effects.removeWrapper(i),
                    t.callback && t.callback.apply(this, arguments),
                    i.dequeue()
                }
            })
        })
    }
} (jQuery),
function(n) {
    n.effects.explode = function(t) {
        return this.queue(function() {
            var r = t.options.pieces ? Math.round(Math.sqrt(t.options.pieces)) : 3,
            u = t.options.pieces ? Math.round(Math.sqrt(t.options.pieces)) : 3,
            i,
            o,
            s,
            h,
            f,
            e;
            for (t.options.mode = t.options.mode == "toggle" ? n(this).is(":visible") ? "hide": "show": t.options.mode, i = n(this).show().css("visibility", "hidden"), o = i.offset(), o.top -= parseInt(i.css("marginTop"), 10) || 0, o.left -= parseInt(i.css("marginLeft"), 10) || 0, s = i.outerWidth(!0), h = i.outerHeight(!0), f = 0; f < r; f++) for (e = 0; e < u; e++) i.clone().appendTo("body").wrap("<div></div>").css({
                position: "absolute",
                visibility: "visible",
                left: -e * (s / u),
                top: -f * (h / r)
            }).parent().addClass("ui-effects-explode").css({
                position: "absolute",
                overflow: "hidden",
                width: s / u,
                height: h / r,
                left: o.left + e * (s / u) + (t.options.mode == "show" ? (e - Math.floor(u / 2)) * (s / u) : 0),
                top: o.top + f * (h / r) + (t.options.mode == "show" ? (f - Math.floor(r / 2)) * (h / r) : 0),
                opacity: t.options.mode == "show" ? 0: 1
            }).animate({
                left: o.left + e * (s / u) + (t.options.mode == "show" ? 0: (e - Math.floor(u / 2)) * (s / u)),
                top: o.top + f * (h / r) + (t.options.mode == "show" ? 0: (f - Math.floor(r / 2)) * (h / r)),
                opacity: t.options.mode == "show" ? 1: 0
            },
            t.duration || 500);
            setTimeout(function() {
                t.options.mode == "show" ? i.css({
                    visibility: "visible"
                }) : i.css({
                    visibility: "visible"
                }).hide(),
                t.callback && t.callback.apply(i[0]),
                i.dequeue(),
                n("div.ui-effects-explode").remove()
            },
            t.duration || 500)
        })
    }
} (jQuery),
function(n) {
    n.effects.fade = function(t) {
        return this.queue(function() {
            var i = n(this),
            r = n.effects.setMode(i, t.options.mode || "hide");
            i.animate({
                opacity: r
            },
            {
                queue: !1,
                duration: t.duration,
                easing: t.options.easing,
                complete: function() {
                    t.callback && t.callback.apply(this, arguments),
                    i.dequeue()
                }
            })
        })
    }
} (jQuery),
function(n) {
    n.effects.fold = function(t) {
        return this.queue(function() {
            var i = n(this),
            h = ["position", "top", "bottom", "left", "right"],
            r = n.effects.setMode(i, t.options.mode || "hide"),
            f = t.options.size || 15,
            c = !!t.options.horizFirst,
            l = t.duration ? t.duration / 2: n.fx.speeds._default / 2,
            o,
            s;
            n.effects.save(i, h),
            i.show();
            var u = n.effects.createWrapper(i).css({
                overflow: "hidden"
            }),
            a = r == "show" != c,
            v = a ? ["width", "height"] : ["height", "width"],
            e = a ? [u.width(), u.height()] : [u.height(), u.width()],
            y = /([0-9]+)%/.exec(f);
            y && (f = parseInt(y[1], 10) / 100 * e[r == "hide" ? 0: 1]),
            r == "show" && u.css(c ? {
                height: 0,
                width: f
            }: {
                height: f,
                width: 0
            }),
            o = {},
            s = {},
            o[v[0]] = r == "show" ? e[0] : f,
            s[v[1]] = r == "show" ? e[1] : 0,
            u.animate(o, l, t.options.easing).animate(s, l, t.options.easing, 
            function() {
                r == "hide" && i.hide(),
                n.effects.restore(i, h),
                n.effects.removeWrapper(i),
                t.callback && t.callback.apply(i[0], arguments),
                i.dequeue()
            })
        })
    }
} (jQuery),
function(n) {
    n.effects.highlight = function(t) {
        return this.queue(function() {
            var i = n(this),
            u = ["backgroundImage", "backgroundColor", "opacity"],
            r = n.effects.setMode(i, t.options.mode || "show"),
            f = {
                backgroundColor: i.css("backgroundColor")
            };
            r == "hide" && (f.opacity = 0),
            n.effects.save(i, u),
            i.show().css({
                backgroundImage: "none",
                backgroundColor: t.options.color || "#ffff99"
            }).animate(f, {
                queue: !1,
                duration: t.duration,
                easing: t.options.easing,
                complete: function() {
                    r == "hide" && i.hide(),
                    n.effects.restore(i, u),
                    r == "show" && !n.support.opacity && this.style.removeAttribute("filter"),
                    t.callback && t.callback.apply(this, arguments),
                    i.dequeue()
                }
            })
        })
    }
} (jQuery),
function(n) {
    n.effects.pulsate = function(t) {
        return this.queue(function() {
            var i = n(this),
            u = n.effects.setMode(i, t.options.mode || "show"),
            r;
            for (times = (t.options.times || 5) * 2 - 1, duration = t.duration ? t.duration / 2: n.fx.speeds._default / 2, isVisible = i.is(":visible"), animateTo = 0, isVisible || (i.css("opacity", 0).show(), animateTo = 1), (u == "hide" && isVisible || u == "show" && !isVisible) && times--, r = 0; r < times; r++) i.animate({
                opacity: animateTo
            },
            duration, t.options.easing),
            animateTo = (animateTo + 1) % 2;
            i.animate({
                opacity: animateTo
            },
            duration, t.options.easing, 
            function() {
                animateTo == 0 && i.hide(),
                t.callback && t.callback.apply(this, arguments)
            }),
            i.queue("fx", 
            function() {
                i.dequeue()
            }).dequeue()
        })
    }
} (jQuery),
function(n) {
    n.effects.puff = function(t) {
        return this.queue(function() {
            var i = n(this),
            r = n.effects.setMode(i, t.options.mode || "hide"),
            f = parseInt(t.options.percent, 10) || 150,
            e = f / 100,
            u = {
                height: i.height(),
                width: i.width()
            };
            n.extend(t.options, {
                fade: !0,
                mode: r,
                percent: r == "hide" ? f: 100,
                from: r == "hide" ? u: {
                    height: u.height * e,
                    width: u.width * e
                }
            }),
            i.effect("scale", t.options, t.duration, t.callback),
            i.dequeue()
        })
    },
    n.effects.scale = function(t) {
        return this.queue(function() {
            var i = n(this),
            r = n.extend(!0, {},
            t.options),
            u = n.effects.setMode(i, t.options.mode || "effect"),
            o = parseInt(t.options.percent, 10) || (parseInt(t.options.percent, 10) == 0 ? 0: u == "hide" ? 0: 100),
            s = t.options.direction || "both",
            h = t.options.origin,
            f,
            e;
            u != "effect" && (r.origin = h || ["middle", "center"], r.restore = !0),
            f = {
                height: i.height(),
                width: i.width()
            },
            i.from = t.options.from || (u == "show" ? {
                height: 0,
                width: 0
            }: f),
            e = {
                y: s != "horizontal" ? o / 100: 1,
                x: s != "vertical" ? o / 100: 1
            },
            i.to = {
                height: f.height * e.y,
                width: f.width * e.x
            },
            t.options.fade && (u == "show" && (i.from.opacity = 0, i.to.opacity = 1), u == "hide" && (i.from.opacity = 1, i.to.opacity = 0)),
            r.from = i.from,
            r.to = i.to,
            r.mode = u,
            i.effect("size", r, t.duration, t.callback),
            i.dequeue()
        })
    },
    n.effects.size = function(t) {
        return this.queue(function() {
            var i = n(this),
            f = ["position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity"],
            v = ["position", "top", "bottom", "left", "right", "overflow", "opacity"],
            a = ["width", "height", "overflow"],
            c = ["fontSize"],
            e = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"],
            o = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"],
            p = n.effects.setMode(i, t.options.mode || "effect"),
            l = t.options.restore || !1,
            s = t.options.scale || "both",
            y = t.options.origin,
            u = {
                height: i.height(),
                width: i.width()
            },
            h,
            r;
            i.from = t.options.from || u,
            i.to = t.options.to || u,
            y && (h = n.effects.getBaseline(y, u), i.from.top = (u.height - i.from.height) * h.y, i.from.left = (u.width - i.from.width) * h.x, i.to.top = (u.height - i.to.height) * h.y, i.to.left = (u.width - i.to.width) * h.x),
            r = {
                from: {
                    y: i.from.height / u.height,
                    x: i.from.width / u.width
                },
                to: {
                    y: i.to.height / u.height,
                    x: i.to.width / u.width
                }
            },
            (s == "box" || s == "both") && (r.from.y != r.to.y && (f = f.concat(e), i.from = n.effects.setTransition(i, e, r.from.y, i.from), i.to = n.effects.setTransition(i, e, r.to.y, i.to)), r.from.x != r.to.x && (f = f.concat(o), i.from = n.effects.setTransition(i, o, r.from.x, i.from), i.to = n.effects.setTransition(i, o, r.to.x, i.to))),
            (s == "content" || s == "both") && r.from.y != r.to.y && (f = f.concat(c), i.from = n.effects.setTransition(i, c, r.from.y, i.from), i.to = n.effects.setTransition(i, c, r.to.y, i.to)),
            n.effects.save(i, l ? f: v),
            i.show(),
            n.effects.createWrapper(i),
            i.css("overflow", "hidden").css(i.from),
            (s == "content" || s == "both") && (e = e.concat(["marginTop", "marginBottom"]).concat(c), o = o.concat(["marginLeft", "marginRight"]), a = f.concat(e).concat(o), i.find("*[width]").each(function() {
                child = n(this),
                l && n.effects.save(child, a);
                var i = {
                    height: child.height(),
                    width: child.width()
                };
                child.from = {
                    height: i.height * r.from.y,
                    width: i.width * r.from.x
                },
                child.to = {
                    height: i.height * r.to.y,
                    width: i.width * r.to.x
                },
                r.from.y != r.to.y && (child.from = n.effects.setTransition(child, e, r.from.y, child.from), child.to = n.effects.setTransition(child, e, r.to.y, child.to)),
                r.from.x != r.to.x && (child.from = n.effects.setTransition(child, o, r.from.x, child.from), child.to = n.effects.setTransition(child, o, r.to.x, child.to)),
                child.css(child.from),
                child.animate(child.to, t.duration, t.options.easing, 
                function() {
                    l && n.effects.restore(child, a)
                })
            })),
            i.animate(i.to, {
                queue: !1,
                duration: t.duration,
                easing: t.options.easing,
                complete: function() {
                    i.to.opacity === 0 && i.css("opacity", i.from.opacity),
                    p == "hide" && i.hide(),
                    n.effects.restore(i, l ? f: v),
                    n.effects.removeWrapper(i),
                    t.callback && t.callback.apply(this, arguments),
                    i.dequeue()
                }
            })
        })
    }
} (jQuery),
function(n) {
    n.effects.shake = function(t) {
        return this.queue(function() {
            var i = n(this),
            l = ["position", "top", "bottom", "left", "right"],
            y = n.effects.setMode(i, t.options.mode || "effect"),
            u = t.options.direction || "left",
            f = t.options.distance || 20,
            v = t.options.times || 3,
            r = t.duration || t.options.duration || 140,
            c;
            n.effects.save(i, l),
            i.show(),
            n.effects.createWrapper(i);
            var e = u == "up" || u == "down" ? "top": "left",
            o = u == "up" || u == "left" ? "pos": "neg",
            s = {},
            h = {},
            a = {};
            for (s[e] = (o == "pos" ? "-=": "+=") + f, h[e] = (o == "pos" ? "+=": "-=") + f * 2, a[e] = (o == "pos" ? "-=": "+=") + f * 2, i.animate(s, r, t.options.easing), c = 1; c < v; c++) i.animate(h, r, t.options.easing).animate(a, r, t.options.easing);
            i.animate(h, r, t.options.easing).animate(s, r / 2, t.options.easing, 
            function() {
                n.effects.restore(i, l),
                n.effects.removeWrapper(i),
                t.callback && t.callback.apply(this, arguments)
            }),
            i.queue("fx", 
            function() {
                i.dequeue()
            }),
            i.dequeue()
        })
    }
} (jQuery),
function(n) {
    n.effects.slide = function(t) {
        return this.queue(function() {
            var i = n(this),
            h = ["position", "top", "bottom", "left", "right"],
            f = n.effects.setMode(i, t.options.mode || "show"),
            u = t.options.direction || "left",
            s;
            n.effects.save(i, h),
            i.show(),
            n.effects.createWrapper(i).css({
                overflow: "hidden"
            });
            var e = u == "up" || u == "down" ? "top": "left",
            o = u == "up" || u == "left" ? "pos": "neg",
            r = t.options.distance || (e == "top" ? i.outerHeight({
                margin: !0
            }) : i.outerWidth({
                margin: !0
            }));
            f == "show" && i.css(e, o == "pos" ? isNaN(r) ? "-" + r: -r: r),
            s = {},
            s[e] = (f == "show" ? o == "pos" ? "+=": "-=": o == "pos" ? "-=": "+=") + r,
            i.animate(s, {
                queue: !1,
                duration: t.duration,
                easing: t.options.easing,
                complete: function() {
                    f == "hide" && i.hide(),
                    n.effects.restore(i, h),
                    n.effects.removeWrapper(i),
                    t.callback && t.callback.apply(this, arguments),
                    i.dequeue()
                }
            })
        })
    }
} (jQuery),
function(n) {
    n.effects.transfer = function(t) {
        return this.queue(function() {
            var i = n(this),
            r = n(t.options.to),
            u = r.offset(),
            e = {
                top: u.top,
                left: u.left,
                height: r.innerHeight(),
                width: r.innerWidth()
            },
            f = i.offset(),
            o = n('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(t.options.className).css({
                top: f.top,
                left: f.left,
                height: i.innerHeight(),
                width: i.innerWidth(),
                position: "absolute"
            }).animate(e, t.duration, t.options.easing, 
            function() {
                o.remove(),
                t.callback && t.callback.apply(i[0], arguments),
                i.dequeue()
            })
        })
    }
} (jQuery),
function(n) {
    n.widget("ui.accordion", {
        options: {
            active: 0,
            animated: "slide",
            autoHeight: !0,
            clearStyle: !1,
            collapsible: !1,
            event: "click",
            fillSpace: !1,
            header: "> li > :first-child,> :not(li):even",
            icons: {
                header: "ui-icon-triangle-1-e",
                headerSelected: "ui-icon-triangle-1-s"
            },
            navigation: !1,
            navigationFilter: function() {
                return this.href.toLowerCase() === location.href.toLowerCase()
            }
        },
        _create: function() {
            var t = this,
            i = t.options,
            r,
            u;
            t.running = 0,
            t.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"),
            t.headers = t.element.find(i.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion", 
            function() {
                i.disabled || n(this).addClass("ui-state-hover")
            }).bind("mouseleave.accordion", 
            function() {
                i.disabled || n(this).removeClass("ui-state-hover")
            }).bind("focus.accordion", 
            function() {
                i.disabled || n(this).addClass("ui-state-focus")
            }).bind("blur.accordion", 
            function() {
                i.disabled || n(this).removeClass("ui-state-focus")
            }),
            t.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"),
            i.navigation && (r = t.element.find("a").filter(i.navigationFilter).eq(0), r.length && (u = r.closest(".ui-accordion-header"), t.active = u.length ? u: r.closest(".ui-accordion-content").prev())),
            t.active = t._findActive(t.active || i.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"),
            t.active.next().addClass("ui-accordion-content-active"),
            t._createIcons(),
            t.resize(),
            t.element.attr("role", "tablist"),
            t.headers.attr("role", "tab").bind("keydown.accordion", 
            function(n) {
                return t._keydown(n)
            }).next().attr("role", "tabpanel"),
            t.headers.not(t.active || "").attr({
                "aria-expanded": "false",
                "aria-selected": "false",
                tabIndex: -1
            }).next().hide(),
            t.active.length ? t.active.attr({
                "aria-expanded": "true",
                "aria-selected": "true",
                tabIndex: 0
            }) : t.headers.eq(0).attr("tabIndex", 0),
            n.browser.safari || t.headers.find("a").attr("tabIndex", -1),
            i.event && t.headers.bind(i.event.split(" ").join(".accordion ") + ".accordion", 
            function(n) {
                t._clickHandler.call(t, n, this),
                n.preventDefault()
            })
        },
        _createIcons: function() {
            var t = this.options;
            t.icons && (n("<span></span>").addClass("ui-icon " + t.icons.header).prependTo(this.headers), this.active.children(".ui-icon").toggleClass(t.icons.header).toggleClass(t.icons.headerSelected), this.element.addClass("ui-accordion-icons"))
        },
        _destroyIcons: function() {
            this.headers.children(".ui-icon").remove(),
            this.element.removeClass("ui-accordion-icons")
        },
        destroy: function() {
            var t = this.options,
            i;
            return this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),
            this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"),
            this.headers.find("a").removeAttr("tabIndex"),
            this._destroyIcons(),
            i = this.headers.next().css("display", "").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled"),
            (t.autoHeight || t.fillHeight) && i.css("height", ""),
            n.Widget.prototype.destroy.call(this)
        },
        _setOption: function(t, i) {
            n.Widget.prototype._setOption.apply(this, arguments),
            t == "active" && this.activate(i),
            t == "icons" && (this._destroyIcons(), i && this._createIcons()),
            t == "disabled" && this.headers.add(this.headers.next())[i ? "addClass": "removeClass"]("ui-accordion-disabled ui-state-disabled")
        },
        _keydown: function(t) {
            if (! (this.options.disabled || t.altKey || t.ctrlKey)) {
                var i = n.ui.keyCode,
                u = this.headers.length,
                f = this.headers.index(t.target),
                r = !1;
                switch (t.keyCode) {
                case i.RIGHT:
                case i.DOWN:
                    r = this.headers[(f + 1) % u];
                    break;
                case i.LEFT:
                case i.UP:
                    r = this.headers[(f - 1 + u) % u];
                    break;
                case i.SPACE:
                case i.ENTER:
                    this._clickHandler({
                        target:
                        t.target
                    },
                    t.target),
                    t.preventDefault()
                }
                return r ? (n(t.target).attr("tabIndex", -1), n(r).attr("tabIndex", 0), r.focus(), !1) : !0
            }
        },
        resize: function() {
            var i = this.options,
            t,
            r;
            return i.fillSpace ? (n.browser.msie && (r = this.element.parent().css("overflow"), this.element.parent().css("overflow", "hidden")), t = this.element.parent().height(), n.browser.msie && this.element.parent().css("overflow", r), this.headers.each(function() {
                t -= n(this).outerHeight(!0)
            }), this.headers.next().each(function() {
                n(this).height(Math.max(0, t - n(this).innerHeight() + n(this).height()))
            }).css("overflow", "auto")) : i.autoHeight && (t = 0, this.headers.next().each(function() {
                t = Math.max(t, n(this).height("").height())
            }).height(t)),
            this
        },
        activate: function(n) {
            this.options.active = n;
            var t = this._findActive(n)[0];
            return this._clickHandler({
                target: t
            },
            t),
            this
        },
        _findActive: function(t) {
            return t ? typeof t == "number" ? this.headers.filter(":eq(" + t + ")") : this.headers.not(this.headers.not(t)) : t === !1 ? n([]) : this.headers.filter(":eq(0)")
        },
        _clickHandler: function(t, i) {
            var r = this.options,
            u,
            f;
            if (!r.disabled) {
                if (!t.target) {
                    if (!r.collapsible) return;
                    this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(r.icons.headerSelected).addClass(r.icons.header),
                    this.active.next().addClass("ui-accordion-content-active");
                    var e = this.active.next(),
                    s = {
                        options: r,
                        newHeader: n([]),
                        oldHeader: r.active,
                        newContent: n([]),
                        oldContent: e
                    },
                    o = this.active = n([]);
                    this._toggle(o, e, s);
                    return
                }
                if (u = n(t.currentTarget || i), f = u[0] === this.active[0], r.active = r.collapsible && f ? !1: this.headers.index(u), this.running || !r.collapsible && f) return;
                var h = this.active,
                o = u.next(),
                e = this.active.next(),
                s = {
                    options: r,
                    newHeader: f && r.collapsible ? n([]) : u,
                    oldHeader: this.active,
                    newContent: f && r.collapsible ? n([]) : o,
                    oldContent: e
                },
                c = this.headers.index(this.active[0]) > this.headers.index(u[0]);
                this.active = f ? n([]) : u,
                this._toggle(o, e, s, f, c),
                h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(r.icons.headerSelected).addClass(r.icons.header),
                f || (u.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(r.icons.header).addClass(r.icons.headerSelected), u.next().addClass("ui-accordion-content-active"));
                return
            }
        },
        _toggle: function(t, i, r, u, f) {
            var o = this,
            e = o.options,
            c,
            h;
            if (o.toShow = t, o.toHide = i, o.data = r, c = function() {
                if (o) return o._completed.apply(o, arguments)
            },
            o._trigger("changestart", null, o.data), o.running = i.size() === 0 ? t.size() : i.size(), e.animated) {
                h = {},
                h = e.collapsible && u ? {
                    toShow: n([]),
                    toHide: i,
                    complete: c,
                    down: f,
                    autoHeight: e.autoHeight || e.fillSpace
                }: {
                    toShow: t,
                    toHide: i,
                    complete: c,
                    down: f,
                    autoHeight: e.autoHeight || e.fillSpace
                },
                e.proxied || (e.proxied = e.animated),
                e.proxiedDuration || (e.proxiedDuration = e.duration),
                e.animated = n.isFunction(e.proxied) ? e.proxied(h) : e.proxied,
                e.duration = n.isFunction(e.proxiedDuration) ? e.proxiedDuration(h) : e.proxiedDuration;
                var l = n.ui.accordion.animations,
                a = e.duration,
                s = e.animated;
                s && !l[s] && !n.easing[s] && (s = "slide"),
                l[s] || (l[s] = function(n) {
                    this.slide(n, {
                        easing: s,
                        duration: a || 700
                    })
                }),
                l[s](h)
            } else e.collapsible && u ? t.toggle() : (i.hide(), t.show()),
            c(!0);
            i.prev().attr({
                "aria-expanded": "false",
                "aria-selected": "false",
                tabIndex: -1
            }).blur(),
            t.prev().attr({
                "aria-expanded": "true",
                "aria-selected": "true",
                tabIndex: 0
            }).focus()
        },
        _completed: function(n) {
            this.running = n ? 0: --this.running,
            this.running || (this.options.clearStyle && this.toShow.add(this.toHide).css({
                height: "",
                overflow: ""
            }), this.toHide.removeClass("ui-accordion-content-active"), this.toHide.length && (this.toHide.parent()[0].className = this.toHide.parent()[0].className), this._trigger("change", null, this.data))
        }
    }),
    n.extend(n.ui.accordion, {
        version: "1.8.18",
        animations: {
            slide: function(t, i) {
                if (t = n.extend({
                    easing: "swing",
                    duration: 300
                },
                t, i), t.toHide.size()) {
                    if (!t.toShow.size()) {
                        t.toHide.animate({
                            height: "hide",
                            paddingTop: "hide",
                            paddingBottom: "hide"
                        },
                        t);
                        return
                    }
                    var s = t.toShow.css("overflow"),
                    f = 0,
                    u = {},
                    e = {},
                    h = ["height", "paddingTop", "paddingBottom"],
                    o,
                    r = t.toShow;
                    o = r[0].style.width,
                    r.width(r.parent().width() - parseFloat(r.css("paddingLeft")) - parseFloat(r.css("paddingRight")) - (parseFloat(r.css("borderLeftWidth")) || 0) - (parseFloat(r.css("borderRightWidth")) || 0)),
                    n.each(h, 
                    function(i, r) {
                        e[r] = "hide";
                        var f = ("" + n.css(t.toShow[0], r)).match(/^([\d+-.]+)(.*)$/);
                        u[r] = {
                            value: f[1],
                            unit: f[2] || "px"
                        }
                    }),
                    t.toShow.css({
                        height: 0,
                        overflow: "hidden"
                    }).show(),
                    t.toHide.filter(":hidden").each(t.complete).end().filter(":visible").animate(e, {
                        step: function(n, i) {
                            i.prop == "height" && (f = i.end - i.start == 0 ? 0: (i.now - i.start) / (i.end - i.start)),
                            t.toShow[0].style[i.prop] = f * u[i.prop].value + u[i.prop].unit
                        },
                        duration: t.duration,
                        easing: t.easing,
                        complete: function() {
                            t.autoHeight || t.toShow.css("height", ""),
                            t.toShow.css({
                                width: o,
                                overflow: s
                            }),
                            t.complete()
                        }
                    })
                } else t.toShow.animate({
                    height: "show",
                    paddingTop: "show",
                    paddingBottom: "show"
                },
                t)
            },
            bounceslide: function(n) {
                this.slide(n, {
                    easing: n.down ? "easeOutBounce": "swing",
                    duration: n.down ? 1e3: 200
                })
            }
        }
    })
} (jQuery),
function(n) {
    var i = 0;
    n.widget("ui.autocomplete", {
        options: {
            appendTo: "body",
            autoFocus: !1,
            delay: 300,
            minLength: 1,
            position: {
                my: "left top",
                at: "left bottom",
                collision: "none"
            },
            source: null
        },
        pending: 0,
        _create: function() {
            var t = this,
            r = this.element[0].ownerDocument,
            i;
            this.element.addClass("ui-autocomplete-input").attr("autocomplete", "off").attr({
                role: "textbox",
                "aria-autocomplete": "list",
                "aria-haspopup": "true"
            }).bind("keydown.autocomplete", 
            function(r) {
                if (!t.options.disabled && !t.element.propAttr("readOnly")) {
                    i = !1;
                    var u = n.ui.keyCode;
                    switch (r.keyCode) {
                    case u.PAGE_UP:
                        t._move("previousPage", r);
                        break;
                    case u.PAGE_DOWN:
                        t._move("nextPage", r);
                        break;
                    case u.UP:
                        t._move("previous", r),
                        r.preventDefault();
                        break;
                    case u.DOWN:
                        t._move("next", r),
                        r.preventDefault();
                        break;
                    case u.ENTER:
                    case u.NUMPAD_ENTER:
                        t.menu.active && (i = !0, r.preventDefault());
                    case u.TAB:
                        if (!t.menu.active) return;
                        t.menu.select(r);
                        break;
                    case u.ESCAPE:
                        t.element.val(t.term),
                        t.close(r);
                        break;
                    default:
                        clearTimeout(t.searching),
                        t.searching = setTimeout(function() {
                            t.term != t.element.val() && (t.selectedItem = null, t.search(null, r))
                        },
                        t.options.delay)
                    }
                }
            }).bind("keypress.autocomplete", 
            function(n) {
                i && (i = !1, n.preventDefault())
            }).bind("focus.autocomplete", 
            function() {
                t.options.disabled || (t.selectedItem = null, t.previous = t.element.val())
            }).bind("blur.autocomplete", 
            function(n) {
                t.options.disabled || (clearTimeout(t.searching), t.closing = setTimeout(function() {
                    t.close(n),
                    t._change(n)
                },
                150))
            }),
            this._initSource(),
            this.response = function() {
                return t._response.apply(t, arguments)
            },
            this.menu = n("<ul></ul>").addClass("ui-autocomplete").appendTo(n(this.options.appendTo || "body", r)[0]).mousedown(function(i) {
                var r = t.menu.element[0];
                n(i.target).closest(".ui-menu-item").length || setTimeout(function() {
                    n(document).one("mousedown", 
                    function(i) {
                        i.target !== t.element[0] && i.target !== r && !n.ui.contains(r, i.target) && t.close()
                    })
                },
                1),
                setTimeout(function() {
                    clearTimeout(t.closing)
                },
                13)
            }).menu({
                focus: function(n, i) {
                    var r = i.item.data("item.autocomplete"); ! 1 !== t._trigger("focus", n, {
                        item: r
                    }) && /^key/.test(n.originalEvent.type) && t.element.val(r.value)
                },
                selected: function(n, i) {
                    var u = i.item.data("item.autocomplete"),
                    f = t.previous;
                    t.element[0] !== r.activeElement && (t.element.focus(), t.previous = f, setTimeout(function() {
                        t.previous = f,
                        t.selectedItem = u
                    },
                    1)),
                    !1 !== t._trigger("select", n, {
                        item: u
                    }) && t.element.val(u.value),
                    t.term = t.element.val(),
                    t.close(n),
                    t.selectedItem = u
                },
                blur: function() {
                    t.menu.element.is(":visible") && t.element.val() !== t.term && t.element.val(t.term)
                }
            }).zIndex(this.element.zIndex() + 1).css({
                top: 0,
                left: 0
            }).hide().data("menu"),
            n.fn.bgiframe && this.menu.element.bgiframe(),
            t.beforeunloadHandler = function() {
                t.element.removeAttr("autocomplete")
            },
            n(window).bind("beforeunload", t.beforeunloadHandler)
        },
        destroy: function() {
            this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),
            this.menu.element.remove(),
            n(window).unbind("beforeunload", this.beforeunloadHandler),
            n.Widget.prototype.destroy.call(this)
        },
        _setOption: function(t, i) {
            n.Widget.prototype._setOption.apply(this, arguments),
            t === "source" && this._initSource(),
            t === "appendTo" && this.menu.element.appendTo(n(i || "body", this.element[0].ownerDocument)[0]),
            t === "disabled" && i && this.xhr && this.xhr.abort()
        },
        _initSource: function() {
            var t = this,
            r,
            u;
            n.isArray(this.options.source) ? (r = this.options.source, this.source = function(t, i) {
                i(n.ui.autocomplete.filter(r, t.term))
            }) : typeof this.options.source == "string" ? (u = this.options.source, this.source = function(r, f) {
                t.xhr && t.xhr.abort(),
                t.xhr = n.ajax({
                    url: u,
                    data: r,
                    dataType: "json",
                    context: {
                        autocompleteRequest: ++i
                    },
                    success: function(n) {
                        this.autocompleteRequest === i && f(n)
                    },
                    error: function() {
                        this.autocompleteRequest === i && f([])
                    }
                })
            }) : this.source = this.options.source
        },
        search: function(n, t) {
            return (n = n != null ? n: this.element.val(), this.term = this.element.val(), n.length < this.options.minLength) ? this.close(t) : (clearTimeout(this.closing), this._trigger("search", t) !== !1 ? this._search(n) : void 0)
        },
        _search: function(n) {
            this.pending++,
            this.element.addClass("ui-autocomplete-loading"),
            this.source({
                term: n
            },
            this.response)
        },
        _response: function(n) { ! this.options.disabled && n && n.length ? (n = this._normalize(n), this._suggest(n), this._trigger("open")) : this.close(),
            this.pending--,
            this.pending || this.element.removeClass("ui-autocomplete-loading")
        },
        close: function(n) {
            clearTimeout(this.closing),
            this.menu.element.is(":visible") && (this.menu.element.hide(), this.menu.deactivate(), this._trigger("close", n))
        },
        _change: function(n) {
            this.previous !== this.element.val() && this._trigger("change", n, {
                item: this.selectedItem
            })
        },
        _normalize: function(t) {
            return t.length && t[0].label && t[0].value ? t: n.map(t, 
            function(t) {
                return typeof t == "string" ? {
                    label: t,
                    value: t
                }: n.extend({
                    label: t.label || t.value,
                    value: t.value || t.label
                },
                t)
            })
        },
        _suggest: function(t) {
            var i = this.menu.element.empty().zIndex(this.element.zIndex() + 1);
            this._renderMenu(i, t),
            this.menu.deactivate(),
            this.menu.refresh(),
            i.show(),
            this._resizeMenu(),
            i.position(n.extend({
                of: this.element
            },
            this.options.position)),
            this.options.autoFocus && this.menu.next(new n.Event("mouseover"))
        },
        _resizeMenu: function() {
            var n = this.menu.element;
            n.outerWidth(Math.max(n.width("").outerWidth() + 1, this.element.outerWidth()))
        },
        _renderMenu: function(t, i) {
            var r = this;
            n.each(i, 
            function(n, i) {
                r._renderItem(t, i)
            })
        },
        _renderItem: function(t, i) {
            return n("<li></li>").data("item.autocomplete", i).append(n("<a></a>").text(i.label)).appendTo(t)
        },
        _move: function(n, t) {
            if (this.menu.element.is(":visible")) {
                if (this.menu.first() && /^previous/.test(n) || this.menu.last() && /^next/.test(n)) {
                    this.element.val(this.term),
                    this.menu.deactivate();
                    return
                }
                this.menu[n](t)
            } else this.search(null, t)
        },
        widget: function() {
            return this.menu.element
        }
    }),
    n.extend(n.ui.autocomplete, {
        escapeRegex: function(n) {
            return n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")
        },
        filter: function(t, i) {
            var r = new RegExp(n.ui.autocomplete.escapeRegex(i), "i");
            return n.grep(t, 
            function(n) {
                return r.test(n.label || n.value || n)
            })
        }
    })
} (jQuery),
function(n) {
    n.widget("ui.menu", {
        _create: function() {
            var t = this;
            this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({
                role: "listbox",
                "aria-activedescendant": "ui-active-menuitem"
            }).click(function(i) { ! n(i.target).closest(".ui-menu-item a").length || (i.preventDefault(), t.select(i))
            }),
            this.refresh()
        },
        refresh: function() {
            var t = this,
            i = this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role", "menuitem");
            i.children("a").addClass("ui-corner-all").attr("tabindex", -1).mouseenter(function(i) {
                t.activate(i, n(this).parent())
            }).mouseleave(function() {
                t.deactivate()
            })
        },
        activate: function(n, t) {
            if (this.deactivate(), this.hasScroll()) {
                var i = t.offset().top - this.element.offset().top,
                r = this.element.scrollTop(),
                u = this.element.height();
                i < 0 ? this.element.scrollTop(r + i) : i >= u && this.element.scrollTop(r + i - u + t.height())
            }
            this.active = t.eq(0).children("a").addClass("ui-state-hover").attr("id", "ui-active-menuitem").end(),
            this._trigger("focus", n, {
                item: t
            })
        },
        deactivate: function() { ! this.active || (this.active.children("a").removeClass("ui-state-hover").removeAttr("id"), this._trigger("blur"), this.active = null)
        },
        next: function(n) {
            this.move("next", ".ui-menu-item:first", n)
        },
        previous: function(n) {
            this.move("prev", ".ui-menu-item:last", n)
        },
        first: function() {
            return this.active && !this.active.prevAll(".ui-menu-item").length
        },
        last: function() {
            return this.active && !this.active.nextAll(".ui-menu-item").length
        },
        move: function(n, t, i) {
            if (this.active) {
                var r = this.active[n + "All"](".ui-menu-item").eq(0);
                r.length ? this.activate(i, r) : this.activate(i, this.element.children(t))
            } else this.activate(i, this.element.children(t))
        },
        nextPage: function(t) {

            if (this.hasScroll()) {
                if (!this.active || this.last()) {
                    this.activate(t, this.element.children(".ui-menu-item:first"));
                    return
                }
                var r = this.active.offset().top,
                u = this.element.height(),
                i = this.element.children(".ui-menu-item").filter(function() {
                    var t = n(this).offset().top - r - u + n(this).height();
                    return t < 10 && t > -10
                });
                i.length || (i = this.element.children(".ui-menu-item:last")),
                this.activate(t, i)
            } else this.activate(t, this.element.children(".ui-menu-item").filter(!this.active || this.last() ? ":first": ":last"))
        },
        previousPage: function(t) {
            if (this.hasScroll()) {
                if (!this.active || this.first()) {
                    this.activate(t, this.element.children(".ui-menu-item:last"));
                    return
                }
                var i = this.active.offset().top,
                r = this.element.height();
                result = this.element.children(".ui-menu-item").filter(function() {
                    var t = n(this).offset().top - i + r - n(this).height();
                    return t < 10 && t > -10
                }),
                result.length || (result = this.element.children(".ui-menu-item:first")),
                this.activate(t, result)
            } else this.activate(t, this.element.children(".ui-menu-item").filter(!this.active || this.first() ? ":last": ":first"))
        },
        hasScroll: function() {
            return this.element.height() < this.element[n.fn.prop ? "prop": "attr"]("scrollHeight")
        },
        select: function(n) {
            this._trigger("selected", n, {
                item: this.active
            })
        }
    })
} (jQuery),
function(n) {
    var r,
    u,
    f,
    i,
    e = "ui-button ui-widget ui-state-default ui-corner-all",
    h = "ui-state-hover ui-state-active ",
    o = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
    c = function() {
        var t = n(this).find(":ui-button");
        setTimeout(function() {
            t.button("refresh")
        },
        1)
    },
    s = function(t) {
        var i = t.name,
        u = t.form,
        r = n([]);
        return i && (r = u ? n(u).find("[name='" + i + "']") : n("[name='" + i + "']", t.ownerDocument).filter(function() {
            return ! this.form
        })),
        r
    };
    n.widget("ui.button", {
        options: {
            disabled: null,
            text: !0,
            label: null,
            icons: {
                primary: null,
                secondary: null
            }
        },
        _create: function() {
            this.element.closest("form").unbind("reset.button").bind("reset.button", c),
            typeof this.options.disabled != "boolean" ? this.options.disabled = !!this.element.propAttr("disabled") : this.element.propAttr("disabled", this.options.disabled),
            this._determineButtonType(),
            this.hasTitle = !!this.buttonElement.attr("title");
            var o = this,
            t = this.options,
            h = this.type === "checkbox" || this.type === "radio",
            a = "ui-state-hover" + (h ? "": " ui-state-active"),
            l = "ui-state-focus";
            t.label === null && (t.label = this.buttonElement.html()),
            this.buttonElement.addClass(e).attr("role", "button").bind("mouseenter.button", 
            function() {
                t.disabled || (n(this).addClass("ui-state-hover"), this === r && n(this).addClass("ui-state-active"))
            }).bind("mouseleave.button", 
            function() {
                t.disabled || n(this).removeClass(a)
            }).bind("click.button", 
            function(n) {
                t.disabled && (n.preventDefault(), n.stopImmediatePropagation())
            }),
            this.element.bind("focus.button", 
            function() {
                o.buttonElement.addClass(l)
            }).bind("blur.button", 
            function() {
                o.buttonElement.removeClass(l)
            }),
            h && (this.element.bind("change.button", 
            function() {
                i || o.refresh()
            }), this.buttonElement.bind("mousedown.button", 
            function(n) {
                t.disabled || (i = !1, u = n.pageX, f = n.pageY)
            }).bind("mouseup.button", 
            function(n) { ! t.disabled && (u !== n.pageX || f !== n.pageY) && (i = !0)
            })),
            this.type === "checkbox" ? this.buttonElement.bind("click.button", 
            function() {
                if (t.disabled || i) return ! 1;
                n(this).toggleClass("ui-state-active"),
                o.buttonElement.attr("aria-pressed", o.element[0].checked)
            }) : this.type === "radio" ? this.buttonElement.bind("click.button", 
            function() {
                if (t.disabled || i) return ! 1;
                n(this).addClass("ui-state-active"),
                o.buttonElement.attr("aria-pressed", "true");
                var r = o.element[0];
                s(r).not(r).map(function() {
                    return n(this).button("widget")[0]
                }).removeClass("ui-state-active").attr("aria-pressed", "false")
            }) : (this.buttonElement.bind("mousedown.button", 
            function() {
                if (t.disabled) return ! 1;
                n(this).addClass("ui-state-active"),
                r = this,
                n(document).one("mouseup", 
                function() {
                    r = null
                })
            }).bind("mouseup.button", 
            function() {
                if (t.disabled) return ! 1;
                n(this).removeClass("ui-state-active")
            }).bind("keydown.button", 
            function(i) {
                if (t.disabled) return ! 1; (i.keyCode == n.ui.keyCode.SPACE || i.keyCode == n.ui.keyCode.ENTER) && n(this).addClass("ui-state-active")
            }).bind("keyup.button", 
            function() {
                n(this).removeClass("ui-state-active")
            }), this.buttonElement.is("a") && this.buttonElement.keyup(function(t) {
                t.keyCode === n.ui.keyCode.SPACE && n(this).click()
            })),
            this._setOption("disabled", t.disabled),
            this._resetButton()
        },
        _determineButtonType: function() {
            var n,
            t,
            i;
            this.type = this.element.is(":checkbox") ? "checkbox": this.element.is(":radio") ? "radio": this.element.is("input") ? "input": "button",
            this.type === "checkbox" || this.type === "radio" ? (n = this.element.parents().filter(":last"), t = "label[for='" + this.element.attr("id") + "']", this.buttonElement = n.find(t), this.buttonElement.length || (n = n.length ? n.siblings() : this.element.siblings(), this.buttonElement = n.filter(t), this.buttonElement.length || (this.buttonElement = n.find(t))), this.element.addClass("ui-helper-hidden-accessible"), i = this.element.is(":checked"), i && this.buttonElement.addClass("ui-state-active"), this.buttonElement.attr("aria-pressed", i)) : this.buttonElement = this.element
        },
        widget: function() {
            return this.buttonElement
        },
        destroy: function() {
            this.element.removeClass("ui-helper-hidden-accessible"),
            this.buttonElement.removeClass(e + " " + h + " " + o).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),
            this.hasTitle || this.buttonElement.removeAttr("title"),
            n.Widget.prototype.destroy.call(this)
        },
        _setOption: function(t, i) {
            n.Widget.prototype._setOption.apply(this, arguments),
            t === "disabled" ? i ? this.element.propAttr("disabled", !0) : this.element.propAttr("disabled", !1) : this._resetButton()
        },
        refresh: function() {
            var t = this.element.is(":disabled");
            t !== this.options.disabled && this._setOption("disabled", t),
            this.type === "radio" ? s(this.element[0]).each(function() {
                n(this).is(":checked") ? n(this).button("widget").addClass("ui-state-active").attr("aria-pressed", "true") : n(this).button("widget").removeClass("ui-state-active").attr("aria-pressed", "false")
            }) : this.type === "checkbox" && (this.element.is(":checked") ? this.buttonElement.addClass("ui-state-active").attr("aria-pressed", "true") : this.buttonElement.removeClass("ui-state-active").attr("aria-pressed", "false"))
        },
        _resetButton: function() {
            if (this.type === "input") this.options.label && this.element.val(this.options.label);
            else {
                var i = this.buttonElement.removeClass(o),
                f = n("<span></span>", this.element[0].ownerDocument).addClass("ui-button-text").html(this.options.label).appendTo(i.empty()).text(),
                t = this.options.icons,
                u = t.primary && t.secondary,
                r = [];
                t.primary || t.secondary ? (this.options.text && r.push("ui-button-text-icon" + (u ? "s": t.primary ? "-primary": "-secondary")), t.primary && i.prepend("<span class='ui-button-icon-primary ui-icon " + t.primary + "'></span>"), t.secondary && i.append("<span class='ui-button-icon-secondary ui-icon " + t.secondary + "'></span>"), this.options.text || (r.push(u ? "ui-button-icons-only": "ui-button-icon-only"), this.hasTitle || i.attr("title", f))) : r.push("ui-button-text-only"),
                i.addClass(r.join(" "))
            }
        }
    }),
    n.widget("ui.buttonset", {
        options: {
            items: ":button, :submit, :reset, :checkbox, :radio, a, :data(button)"
        },
        _create: function() {
            this.element.addClass("ui-buttonset")
        },
        _init: function() {
            this.refresh()
        },
        _setOption: function(t, i) {
            t === "disabled" && this.buttons.button("option", t, i),
            n.Widget.prototype._setOption.apply(this, arguments)
        },
        refresh: function() {
            var t = this.element.css("direction") === "rtl";
            this.buttons = this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function() {
                return n(this).button("widget")[0]
            }).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t ? "ui-corner-right": "ui-corner-left").end().filter(":last").addClass(t ? "ui-corner-left": "ui-corner-right").end().end()
        },
        destroy: function() {
            this.element.removeClass("ui-buttonset"),
            this.buttons.map(function() {
                return n(this).button("widget")[0]
            }).removeClass("ui-corner-left ui-corner-right").end().button("destroy"),
            n.Widget.prototype.destroy.call(this)
        }
    })
} (jQuery),
function(n, t) {
    function u(i, r) {
        n.extend(i, r);
        for (var u in r)(r[u] == null || r[u] == t) && (i[u] = r[u]);
        return i
    }
    function e(t) {
        var i = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
        return t.bind("mouseout", 
        function(t) {
            var r = n(t.target).closest(i); ! r.length || r.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")
        }).bind("mouseover", 
        function(r) {
            var u = n(r.target).closest(i); ! n.datepicker._isDisabledDatepicker(f.inline ? t.parent()[0] : f.input[0]) && !!u.length && (u.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"), u.addClass("ui-state-hover"), u.hasClass("ui-datepicker-prev") && u.addClass("ui-datepicker-prev-hover"), u.hasClass("ui-datepicker-next") && u.addClass("ui-datepicker-next-hover"))
        })
    }
    function o() {
        this.debug = !1,
        this._curInst = null,
        this._keyEvent = !1,
        this._disabledInputs = [],
        this._datepickerShowing = !1,
        this._inDialog = !1,
        this._mainDivId = "ui-datepicker-div",
        this._inlineClass = "ui-datepicker-inline",
        this._appendClass = "ui-datepicker-append",
        this._triggerClass = "ui-datepicker-trigger",
        this._dialogClass = "ui-datepicker-dialog",
        this._disableClass = "ui-datepicker-disabled",
        this._unselectableClass = "ui-datepicker-unselectable",
        this._currentClass = "ui-datepicker-current-day",
        this._dayOverClass = "ui-datepicker-days-cell-over",
        this.regional = [],
        this.regional[""] = {
            closeText: "Done",
            prevText: "Prev",
            nextText: "Next",
            currentText: "Today",
            monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
            monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
            dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
            dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
            dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
            weekHeader: "Wk",
            dateFormat: "mm/dd/yy",
            firstDay: 0,
            isRTL: !1,
            showMonthAfterYear: !1,
            yearSuffix: ""
        },
        this._defaults = {
            showOn: "focus",
            showAnim: "fadeIn",
            showOptions: {},
            defaultDate: null,
            appendText: "",
            buttonText: "...",
            buttonImage: "",
            buttonImageOnly: !1,
            hideIfNoPrevNext: !1,
            navigationAsDateFormat: !1,
            gotoCurrent: !1,
            changeMonth: !1,
            changeYear: !1,
            yearRange: "c-10:c+10",
            showOtherMonths: !1,
            selectOtherMonths: !1,
            showWeek: !1,
            calculateWeek: this.iso8601Week,
            shortYearCutoff: "+10",
            minDate: null,
            maxDate: null,
            duration: "fast",
            beforeShowDay: null,
            beforeShow: null,
            onSelect: null,
            onChangeMonthYear: null,
            onClose: null,
            numberOfMonths: 1,
            showCurrentAtPos: 0,
            stepMonths: 1,
            stepBigMonths: 12,
            altField: "",
            altFormat: "",
            constrainInput: !0,
            showButtonPanel: !1,
            autoSize: !1,
            disabled: !1
        },
        n.extend(this._defaults, this.regional[""]),
        this.dpDiv = e(n('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))
    }
    n.extend(n.ui, {
        datepicker: {
            version: "1.8.18"
        }
    });
    var i = "datepicker",
    r = +new Date,
    f;
    n.extend(o.prototype, {
        markerClassName: "hasDatepicker",
        maxRows: 4,
        log: function() {
            this.debug && console.log.apply("", arguments)
        },
        _widgetDatepicker: function() {
            return this.dpDiv
        },
        setDefaults: function(n) {
            return u(this._defaults, n || {}),
            this
        },
        _attachDatepicker: function(target, settings) {
            var inlineSettings = null,
            attrName,
            attrValue,
            nodeName,
            inline,
            inst;
            for (attrName in this._defaults) if (attrValue = target.getAttribute("date:" + attrName), attrValue) {
                inlineSettings = inlineSettings || {};
                try {
                    inlineSettings[attrName] = eval(attrValue)
                } catch(err) {
                    inlineSettings[attrName] = attrValue
                }
            }
            nodeName = target.nodeName.toLowerCase(),
            inline = nodeName == "div" || nodeName == "span",
            target.id || (this.uuid += 1, target.id = "dp" + this.uuid),
            inst = this._newInst(n(target), inline),
            inst.settings = n.extend({},
            settings || {},
            inlineSettings || {}),
            nodeName == "input" ? this._connectDatepicker(target, inst) : inline && this._inlineDatepicker(target, inst)
        },
        _newInst: function(t, i) {
            var r = t[0].id.replace(/([^A-Za-z0-9_-])/g, "\\\\$1");
            return {
                id: r,
                input: t,
                selectedDay: 0,
                selectedMonth: 0,
                selectedYear: 0,
                drawMonth: 0,
                drawYear: 0,
                inline: i,
                dpDiv: i ? e(n('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')) : this.dpDiv
            }
        },
        _connectDatepicker: function(t, r) {
            var u = n(t);
            r.append = n([]),
            r.trigger = n([]),
            u.hasClass(this.markerClassName) || (this._attachments(u, r), u.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker", 
            function(n, t, i) {
                r.settings[t] = i
            }).bind("getData.datepicker", 
            function(n, t) {
                return this._get(r, t)
            }), this._autoSize(r), n.data(t, i, r), r.settings.disabled && this._disableDatepicker(t))
        },
        _attachments: function(t, i) {
            var e = this._get(i, "appendText"),
            o = this._get(i, "isRTL"),
            u,
            r,
            f;
            i.append && i.append.remove(),
            e && (i.append = n('<span class="' + this._appendClass + '">' + e + "</span>"), t[o ? "before": "after"](i.append)),
            t.unbind("focus", this._showDatepicker),
            i.trigger && i.trigger.remove(),
            u = this._get(i, "showOn"),
            (u == "focus" || u == "both") && t.focus(this._showDatepicker),
            (u == "button" || u == "both") && (r = this._get(i, "buttonText"), f = this._get(i, "buttonImage"), i.trigger = n(this._get(i, "buttonImageOnly") ? n("<img/>").addClass(this._triggerClass).attr({
                src: f,
                alt: r,
                title: r
            }) : n('<button type="button"></button>').addClass(this._triggerClass).html(f == "" ? r: n("<img/>").attr({
                src: f,
                alt: r,
                title: r
            }))), t[o ? "before": "after"](i.trigger), i.trigger.click(function() {
                return n.datepicker._datepickerShowing && n.datepicker._lastInput == t[0] ? n.datepicker._hideDatepicker() : n.datepicker._datepickerShowing && n.datepicker._lastInput != t[0] ? (n.datepicker._hideDatepicker(), n.datepicker._showDatepicker(t[0])) : n.datepicker._showDatepicker(t[0]),
                !1
            }))
        },
        _autoSize: function(n) {
            var t,
            i,
            r;
            this._get(n, "autoSize") && !n.inline && (t = new Date(2009, 11, 20), i = this._get(n, "dateFormat"), i.match(/[DM]/) && (r = function(n) {
                for (var i = 0, r = 0, t = 0; t < n.length; t++) n[t].length > i && (i = n[t].length, r = t);
                return r
            },
            t.setMonth(r(this._get(n, i.match(/MM/) ? "monthNames": "monthNamesShort"))), t.setDate(r(this._get(n, i.match(/DD/) ? "dayNames": "dayNamesShort")) + 20 - t.getDay())), n.input.attr("size", this._formatDate(n, t).length))
        },
        _inlineDatepicker: function(t, r) {
            var u = n(t);
            u.hasClass(this.markerClassName) || (u.addClass(this.markerClassName).append(r.dpDiv).bind("setData.datepicker", 
            function(n, t, i) {
                r.settings[t] = i
            }).bind("getData.datepicker", 
            function(n, t) {
                return this._get(r, t)
            }), n.data(t, i, r), this._setDate(r, this._getDefaultDate(r), !0), this._updateDatepicker(r), this._updateAlternate(r), r.settings.disabled && this._disableDatepicker(t), r.dpDiv.css("display", "block"))
        },
        _dialogDatepicker: function(t, r, f, e, o) {
            var s = this._dialogInst,
            h;
            if (s || (this.uuid += 1, h = "dp" + this.uuid, this._dialogInput = n('<input type="text" id="' + h + '" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>'), this._dialogInput.keydown(this._doKeyDown), n("body").append(this._dialogInput), s = this._dialogInst = this._newInst(this._dialogInput, !1), s.settings = {},
            n.data(this._dialogInput[0], i, s)), u(s.settings, e || {}), r = r && r.constructor == Date ? this._formatDate(s, r) : r, this._dialogInput.val(r), this._pos = o ? o.length ? o: [o.pageX, o.pageY] : null, !this._pos) {
                var c = document.documentElement.clientWidth,
                l = document.documentElement.clientHeight,
                a = document.documentElement.scrollLeft || document.body.scrollLeft,
                v = document.documentElement.scrollTop || document.body.scrollTop;
                this._pos = [c / 2 - 100 + a, l / 2 - 150 + v]
            }
            return this._dialogInput.css("left", this._pos[0] + 20 + "px").css("top", this._pos[1] + "px"),
            s.settings.onSelect = f,
            this._inDialog = !0,
            this.dpDiv.addClass(this._dialogClass),
            this._showDatepicker(this._dialogInput[0]),
            n.blockUI && n.blockUI(this.dpDiv),
            n.data(this._dialogInput[0], i, s),
            this
        },
        _destroyDatepicker: function(t) {
            var u = n(t),
            f = n.data(t, i),
            r; ! u.hasClass(this.markerClassName) || (r = t.nodeName.toLowerCase(), n.removeData(t, i), r == "input" ? (f.append.remove(), f.trigger.remove(), u.removeClass(this.markerClassName).unbind("focus", this._showDatepicker).unbind("keydown", this._doKeyDown).unbind("keypress", this._doKeyPress).unbind("keyup", this._doKeyUp)) : (r == "div" || r == "span") && u.removeClass(this.markerClassName).empty())
        },
        _enableDatepicker: function(t) {
            var f = n(t),
            e = n.data(t, i),
            r,
            u; ! f.hasClass(this.markerClassName) || (r = t.nodeName.toLowerCase(), r == "input" ? (t.disabled = !1, e.trigger.filter("button").each(function() {
                this.disabled = !1
            }).end().filter("img").css({
                opacity: "1.0",
                cursor: ""
            })) : (r == "div" || r == "span") && (u = f.children("." + this._inlineClass), u.children().removeClass("ui-state-disabled"), u.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")), this._disabledInputs = n.map(this._disabledInputs, 
            function(n) {
                return n == t ? null: n
            }))
        },
        _disableDatepicker: function(t) {
            var f = n(t),
            e = n.data(t, i),
            r,
            u; ! f.hasClass(this.markerClassName) || (r = t.nodeName.toLowerCase(), r == "input" ? (t.disabled = !0, e.trigger.filter("button").each(function() {
                this.disabled = !0
            }).end().filter("img").css({
                opacity: "0.5",
                cursor: "default"
            })) : (r == "div" || r == "span") && (u = f.children("." + this._inlineClass), u.children().addClass("ui-state-disabled"), u.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled", "disabled")), this._disabledInputs = n.map(this._disabledInputs, 
            function(n) {
                return n == t ? null: n
            }), this._disabledInputs[this._disabledInputs.length] = t)
        },
        _isDisabledDatepicker: function(n) {
            if (!n) return ! 1;
            for (var t = 0; t < this._disabledInputs.length; t++) if (this._disabledInputs[t] == n) return ! 0;
            return ! 1
        },
        _getInst: function(t) {
            try {
                return n.data(t, i)
            } catch(r) {
                throw "Missing instance data for this datepicker";
            }
        },
        _optionDatepicker: function(i, r, f) {
            var e = this._getInst(i),
            o;
            if (arguments.length == 2 && typeof r == "string") return r == "defaults" ? n.extend({},
            n.datepicker._defaults) : e ? r == "all" ? n.extend({},
            e.settings) : this._get(e, r) : null;
            if (o = r || {},
            typeof r == "string" && (o = {},
            o[r] = f), e) {
                this._curInst == e && this._hideDatepicker();
                var c = this._getDateDatepicker(i, !0),
                s = this._getMinMaxDate(e, "min"),
                h = this._getMinMaxDate(e, "max");
                u(e.settings, o),
                s !== null && o.dateFormat !== t && o.minDate === t && (e.settings.minDate = this._formatDate(e, s)),
                h !== null && o.dateFormat !== t && o.maxDate === t && (e.settings.maxDate = this._formatDate(e, h)),
                this._attachments(n(i), e),
                this._autoSize(e),
                this._setDate(e, c),
                this._updateAlternate(e),
                this._updateDatepicker(e)
            }
        },
        _changeDatepicker: function(n, t, i) {
            this._optionDatepicker(n, t, i)
        },
        _refreshDatepicker: function(n) {
            var t = this._getInst(n);
            t && this._updateDatepicker(t)
        },
        _setDateDatepicker: function(n, t) {
            var i = this._getInst(n);
            i && (this._setDate(i, t), this._updateDatepicker(i), this._updateAlternate(i))
        },
        _getDateDatepicker: function(n, t) {
            var i = this._getInst(n);
            return i && !i.inline && this._setDateFromField(i, t),
            i ? this._getDate(i) : null
        },
        _doKeyDown: function(t) {
            var i = n.datepicker._getInst(t.target),
            r = !0,
            e = i.dpDiv.is(".ui-datepicker-rtl"),
            u,
            f,
            o;
            if (i._keyEvent = !0, n.datepicker._datepickerShowing) switch (t.keyCode) {
            case 9:
                n.datepicker._hideDatepicker(),
                r = !1;
                break;
            case 13:
                return u = n("td." + n.datepicker._dayOverClass + ":not(." + n.datepicker._currentClass + ")", i.dpDiv),
                u[0] && n.datepicker._selectDay(t.target, i.selectedMonth, i.selectedYear, u[0]),
                f = n.datepicker._get(i, "onSelect"),
                f ? (o = n.datepicker._formatDate(i), f.apply(i.input ? i.input[0] : null, [o, i])) : n.datepicker._hideDatepicker(),
                !1;
            case 27:
                n.datepicker._hideDatepicker();
                break;
            case 33:
                n.datepicker._adjustDate(t.target, t.ctrlKey ? -n.datepicker._get(i, "stepBigMonths") : -n.datepicker._get(i, "stepMonths"), "M");
                break;
            case 34:
                n.datepicker._adjustDate(t.target, t.ctrlKey ? +n.datepicker._get(i, "stepBigMonths") : +n.datepicker._get(i, "stepMonths"), "M");
                break;
            case 35:
                (t.ctrlKey || t.metaKey) && n.datepicker._clearDate(t.target),
                r = t.ctrlKey || t.metaKey;
                break;
            case 36:
                (t.ctrlKey || t.metaKey) && n.datepicker._gotoToday(t.target),
                r = t.ctrlKey || t.metaKey;
                break;
            case 37:
                (t.ctrlKey || t.metaKey) && n.datepicker._adjustDate(t.target, e ? 1: -1, "D"),
                r = t.ctrlKey || t.metaKey,
                t.originalEvent.altKey && n.datepicker._adjustDate(t.target, t.ctrlKey ? -n.datepicker._get(i, "stepBigMonths") : -n.datepicker._get(i, "stepMonths"), "M");
                break;
            case 38:
                (t.ctrlKey || t.metaKey) && n.datepicker._adjustDate(t.target, -7, "D"),
                r = t.ctrlKey || t.metaKey;
                break;
            case 39:
                (t.ctrlKey || t.metaKey) && n.datepicker._adjustDate(t.target, e ? -1: 1, "D"),
                r = t.ctrlKey || t.metaKey,
                t.originalEvent.altKey && n.datepicker._adjustDate(t.target, t.ctrlKey ? +n.datepicker._get(i, "stepBigMonths") : +n.datepicker._get(i, "stepMonths"), "M");
                break;
            case 40:
                (t.ctrlKey || t.metaKey) && n.datepicker._adjustDate(t.target, 7, "D"),
                r = t.ctrlKey || t.metaKey;
                break;
            default:
                r = !1
            } else t.keyCode == 36 && t.ctrlKey ? n.datepicker._showDatepicker(this) : r = !1;
            r && (t.preventDefault(), t.stopPropagation())
        },
        _doKeyPress: function(i) {
            var f = n.datepicker._getInst(i.target),
            r,
            u;
            if (n.datepicker._get(f, "constrainInput")) return r = n.datepicker._possibleChars(n.datepicker._get(f, "dateFormat")),
            u = String.fromCharCode(i.charCode == t ? i.keyCode: i.charCode),
            i.ctrlKey || i.metaKey || u < " " || !r || r.indexOf(u) > -1
        },
        _doKeyUp: function(t) {
            var i = n.datepicker._getInst(t.target),
            r;
            if (i.input.val() != i.lastVal) try {
                r = n.datepicker.parseDate(n.datepicker._get(i, "dateFormat"), i.input ? i.input.val() : null, n.datepicker._getFormatConfig(i)),
                r && (n.datepicker._setDateFromField(i), n.datepicker._updateAlternate(i), n.datepicker._updateDatepicker(i))
            } catch(t) {
                n.datepicker.log(t)
            }
            return ! 0
        },
        _showDatepicker: function(t) {
            var i,
            o,
            s,
            r,
            f;
            if (t = t.target || t, t.nodeName.toLowerCase() != "input" && (t = n("input", t.parentNode)[0]), !n.datepicker._isDisabledDatepicker(t) && n.datepicker._lastInput != t) {
                if (i = n.datepicker._getInst(t), n.datepicker._curInst && n.datepicker._curInst != i && (n.datepicker._curInst.dpDiv.stop(!0, !0), i && n.datepicker._datepickerShowing && n.datepicker._hideDatepicker(n.datepicker._curInst.input[0])), o = n.datepicker._get(i, "beforeShow"), s = o ? o.apply(t, [t, i]) : {},
                s === !1) return;
                if (u(i.settings, s), i.lastVal = null, n.datepicker._lastInput = t, n.datepicker._setDateFromField(i), n.datepicker._inDialog && (t.value = ""), n.datepicker._pos || (n.datepicker._pos = n.datepicker._findPos(t), n.datepicker._pos[1] += t.offsetHeight), r = !1, n(t).parents().each(function() {
                    return r |= n(this).css("position") == "fixed",
                    !r
                }), r && n.browser.opera && (n.datepicker._pos[0] -= document.documentElement.scrollLeft, n.datepicker._pos[1] -= document.documentElement.scrollTop), f = {
                    left: n.datepicker._pos[0],
                    top: n.datepicker._pos[1]
                },
                n.datepicker._pos = null, i.dpDiv.empty(), i.dpDiv.css({
                    position: "absolute",
                    display: "block",
                    top: "-1000px"
                }), n.datepicker._updateDatepicker(i), f = n.datepicker._checkOffset(i, f, r), i.dpDiv.css({
                    position: n.datepicker._inDialog && n.blockUI ? "static": r ? "fixed": "absolute",
                    display: "none",
                    left: f.left + "px",
                    top: f.top + "px"
                }), !i.inline) {
                    var e = n.datepicker._get(i, "showAnim"),
                    h = n.datepicker._get(i, "duration"),
                    c = function() {
                        var r = i.dpDiv.find("iframe.ui-datepicker-cover"),
                        t; ! r.length || (t = n.datepicker._getBorders(i.dpDiv), r.css({
                            left: -t[0],
                            top: -t[1],
                            width: i.dpDiv.outerWidth(),
                            height: i.dpDiv.outerHeight()
                        }))
                    };
                    i.dpDiv.zIndex(n(t).zIndex() + 1),
                    n.datepicker._datepickerShowing = !0,
                    n.effects && n.effects[e] ? i.dpDiv.show(e, n.datepicker._get(i, "showOptions"), h, c) : i.dpDiv[e || "show"](e ? h: null, c),
                    (!e || !h) && c(),
                    i.input.is(":visible") && !i.input.is(":disabled") && i.input.focus(),
                    n.datepicker._curInst = i
                }
            }
        },
        _updateDatepicker: function(t) {
            var s = this,
            i,
            r,
            o;
            s.maxRows = 4,
            i = n.datepicker._getBorders(t.dpDiv),
            f = t,
            t.dpDiv.empty().append(this._generateHTML(t)),
            r = t.dpDiv.find("iframe.ui-datepicker-cover"),
            !r.length || r.css({
                left: -i[0],
                top: -i[1],
                width: t.dpDiv.outerWidth(),
                height: t.dpDiv.outerHeight()
            }),
            t.dpDiv.find("." + this._dayOverClass + " a").mouseover();
            var u = this._getNumberOfMonths(t),
            e = u[1],
            h = 17;
            t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),
            e > 1 && t.dpDiv.addClass("ui-datepicker-multi-" + e).css("width", h * e + "em"),
            t.dpDiv[(u[0] != 1 || u[1] != 1 ? "add": "remove") + "Class"]("ui-datepicker-multi"),
            t.dpDiv[(this._get(t, "isRTL") ? "add": "remove") + "Class"]("ui-datepicker-rtl"),
            t == n.datepicker._curInst && n.datepicker._datepickerShowing && t.input && t.input.is(":visible") && !t.input.is(":disabled") && t.input[0] != document.activeElement && t.input.focus(),
            t.yearshtml && (o = t.yearshtml, setTimeout(function() {
                o === t.yearshtml && t.yearshtml && t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),
                o = t.yearshtml = null
            },
            0))
        },
        _getBorders: function(n) {
            var t = function(n) {
                return {
                    thin: 1,
                    medium: 2,
                    thick: 3
                } [n] || n
            };
            return [parseFloat(t(n.css("border-left-width"))), parseFloat(t(n.css("border-top-width")))]
        },
        _checkOffset: function(t, i, r) {
            var u = t.dpDiv.outerWidth(),
            f = t.dpDiv.outerHeight(),
            h = t.input ? t.input.outerWidth() : 0,
            o = t.input ? t.input.outerHeight() : 0,
            e = document.documentElement.clientWidth + n(document).scrollLeft(),
            s = document.documentElement.clientHeight + n(document).scrollTop();
            return i.left -= this._get(t, "isRTL") ? u - h: 0,
            i.left -= r && i.left == t.input.offset().left ? n(document).scrollLeft() : 0,
            i.top -= r && i.top == t.input.offset().top + o ? n(document).scrollTop() : 0,
            i.left -= Math.min(i.left, i.left + u > e && e > u ? Math.abs(i.left + u - e) : 0),
            i.top -= Math.min(i.top, i.top + f > s && s > f ? Math.abs(f + o) : 0),
            i
        },
        _findPos: function(t) {
            for (var r = this._getInst(t), u = this._get(r, "isRTL"), i; t && (t.type == "hidden" || t.nodeType != 1 || n.expr.filters.hidden(t));) t = t[u ? "previousSibling": "nextSibling"];
            return i = n(t).offset(),
            [i.left, i.top]
        },
        _hideDatepicker: function(t) {
            var r = this._curInst,
            e;
            if (! (!r || t && r != n.data(t, i)) && this._datepickerShowing) {
                var u = this._get(r, "showAnim"),
                o = this._get(r, "duration"),
                s = this,
                f = function() {
                    n.datepicker._tidyDialog(r),
                    s._curInst = null
                };
                n.effects && n.effects[u] ? r.dpDiv.hide(u, n.datepicker._get(r, "showOptions"), o, f) : r.dpDiv[u == "slideDown" ? "slideUp": u == "fadeIn" ? "fadeOut": "hide"](u ? o: null, f),
                u || f(),
                this._datepickerShowing = !1,
                e = this._get(r, "onClose"),
                e && e.apply(r.input ? r.input[0] : null, [r.input ? r.input.val() : "", r]),
                this._lastInput = null,
                this._inDialog && (this._dialogInput.css({
                    position: "absolute",
                    left: "0",
                    top: "-100px"
                }), n.blockUI && (n.unblockUI(), n("body").append(this.dpDiv))),
                this._inDialog = !1
            }
        },
        _tidyDialog: function(n) {
            n.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")
        },
        _checkExternalClick: function(t) {
            if ( !! n.datepicker._curInst) {
                var i = n(t.target),
                r = n.datepicker._getInst(i[0]); (i[0].id != n.datepicker._mainDivId && i.parents("#" + n.datepicker._mainDivId).length == 0 && !i.hasClass(n.datepicker.markerClassName) && !i.closest("." + n.datepicker._triggerClass).length && n.datepicker._datepickerShowing && (!n.datepicker._inDialog || !n.blockUI) || i.hasClass(n.datepicker.markerClassName) && n.datepicker._curInst != r) && n.datepicker._hideDatepicker()
            }
        },
        _adjustDate: function(t, i, r) {
            var f = n(t),
            u = this._getInst(f[0]);
            this._isDisabledDatepicker(f[0]) || (this._adjustInstDate(u, i + (r == "M" ? this._get(u, "showCurrentAtPos") : 0), r), this._updateDatepicker(u))
        },
        _gotoToday: function(t) {
            var u = n(t),
            i = this._getInst(u[0]),
            r;
            this._get(i, "gotoCurrent") && i.currentDay ? (i.selectedDay = i.currentDay, i.drawMonth = i.selectedMonth = i.currentMonth, i.drawYear = i.selectedYear = i.currentYear) : (r = new Date, i.selectedDay = r.getDate(), i.drawMonth = i.selectedMonth = r.getMonth(), i.drawYear = i.selectedYear = r.getFullYear()),
            this._notifyChange(i),
            this._adjustDate(u)
        },
        _selectMonthYear: function(t, i, r) {
            var f = n(t),
            u = this._getInst(f[0]);
            u["selected" + (r == "M" ? "Month": "Year")] = u["draw" + (r == "M" ? "Month": "Year")] = parseInt(i.options[i.selectedIndex].value, 10),
            this._notifyChange(u),
            this._adjustDate(f)
        },
        _selectDay: function(t, i, r, u) {
            var e = n(t),
            f;
            n(u).hasClass(this._unselectableClass) || this._isDisabledDatepicker(e[0]) || (f = this._getInst(e[0]), f.selectedDay = f.currentDay = n("a", u).html(), f.selectedMonth = f.currentMonth = i, f.selectedYear = f.currentYear = r, this._selectDate(t, this._formatDate(f, f.currentDay, f.currentMonth, f.currentYear)))
        },
        _clearDate: function(t) {
            var i = n(t),
            r = this._getInst(i[0]);
            this._selectDate(i, "")
        },
        _selectDate: function(t, i) {
            var f = n(t),
            r = this._getInst(f[0]),
            u;
            i = i != null ? i: this._formatDate(r),
            r.input && r.input.val(i),
            this._updateAlternate(r),
            u = this._get(r, "onSelect"),
            u ? u.apply(r.input ? r.input[0] : null, [i, r]) : r.input && r.input.trigger("change"),
            r.inline ? this._updateDatepicker(r) : (this._hideDatepicker(), this._lastInput = r.input[0], typeof r.input[0] != "object" && r.input.focus(), this._lastInput = null)
        },
        _updateAlternate: function(t) {
            var i = this._get(t, "altField");
            if (i) {
                var r = this._get(t, "altFormat") || this._get(t, "dateFormat"),
                u = this._getDate(t),
                f = this.formatDate(r, u, this._getFormatConfig(t));
                n(i).each(function() {
                    n(this).val(f)
                })
            }
        },
        noWeekends: function(n) {
            var t = n.getDay();
            return [t > 0 && t < 6, ""]
        },
        iso8601Week: function(n) {
            var t = new Date(n.getTime()),
            i;
            return t.setDate(t.getDate() + 4 - (t.getDay() || 7)),
            i = t.getTime(),
            t.setMonth(0),
            t.setDate(1),
            Math.floor(Math.round((i - t) / 864e5) / 7) + 1
        },
        parseDate: function(t, i, r) {
            var l,
            o,
            w,
            u;
            if (t == null || i == null) throw "Invalid arguments";
            if (i = typeof i == "object" ? i.toString() : i + "", i == "") return null;
            l = (r ? r.shortYearCutoff: null) || this._defaults.shortYearCutoff,
            l = typeof l != "string" ? l: (new Date).getFullYear() % 100 + parseInt(l, 10);
            var g = (r ? r.dayNamesShort: null) || this._defaults.dayNamesShort,
            d = (r ? r.dayNames: null) || this._defaults.dayNames,
            k = (r ? r.monthNamesShort: null) || this._defaults.monthNamesShort,
            nt = (r ? r.monthNames: null) || this._defaults.monthNames,
            e = -1,
            s = -1,
            h = -1,
            v = -1,
            y = !1,
            a = function(n) {
                var i = o + 1 < t.length && t.charAt(o + 1) == n;
                return i && o++,
                i
            },
            c = function(n) {
                var r = a(n),
                u = n == "@" ? 14: n == "!" ? 20: n == "y" && r ? 4: n == "o" ? 3: 2,
                e = new RegExp("^\\d{1," + u + "}"),
                t = i.substring(f).match(e);
                if (!t) throw "Missing number at position " + f;
                return f += t[0].length,
                parseInt(t[0], 10)
            },
            b = function(t, r, u) {
                var o = n.map(a(t) ? u: r, 
                function(n, t) {
                    return [[t, n]]
                }).sort(function(n, t) {
                    return - (n[1].length - t[1].length)
                }),
                e = -1;
                if (n.each(o, 
                function(n, t) {
                    var r = t[1];
                    if (i.substr(f, r.length).toLowerCase() == r.toLowerCase()) return e = t[0],
                    f += r.length,
                    !1
                }), e != -1) return e + 1;
                throw "Unknown name at position " + f;
            },
            p = function() {
                if (i.charAt(f) != t.charAt(o)) throw "Unexpected literal at position " + f;
                f++
            },
            f = 0;
            for (o = 0; o < t.length; o++) if (y) t.charAt(o) == "'" && !a("'") ? y = !1: p();
            else switch (t.charAt(o)) {
            case "d":
                h = c("d");
                break;
            case "D":
                b("D", g, d);
                break;
            case "o":
                v = c("o");
                break;
            case "m":
                s = c("m");
                break;
            case "M":
                s = b("M", k, nt);
                break;
            case "y":
                e = c("y");
                break;
            case "@":
                u = new Date(c("@")),
                e = u.getFullYear(),
                s = u.getMonth() + 1,
                h = u.getDate();
                break;
            case "!":
                u = new Date((c("!") - this._ticksTo1970) / 1e4),
                e = u.getFullYear(),
                s = u.getMonth() + 1,
                h = u.getDate();
                break;
            case "'":
                a("'") ? p() : y = !0;
                break;
            default:
                p()
            }
            if (f < i.length) throw "Extra/unparsed characters found in date: " + i.substring(f);
            if (e == -1 ? e = (new Date).getFullYear() : e < 100 && (e += (new Date).getFullYear() - (new Date).getFullYear() % 100 + (e <= l ? 0: -100)), v > -1) for (s = 1, h = v;;) {
                if (w = this._getDaysInMonth(e, s - 1), h <= w) break;
                s++,
                h -= w
            }
            if (u = this._daylightSavingAdjust(new Date(e, s - 1, h)), u.getFullYear() != e || u.getMonth() + 1 != s || u.getDate() != h) throw "Invalid date";
            return u
        },
        ATOM: "yy-mm-dd",
        COOKIE: "D, dd M yy",
        ISO_8601: "yy-mm-dd",
        RFC_822: "D, d M y",
        RFC_850: "DD, dd-M-y",
        RFC_1036: "D, d M y",
        RFC_1123: "D, d M yy",
        RFC_2822: "D, d M yy",
        RSS: "D, d M y",
        TICKS: "!",
        TIMESTAMP: "@",
        W3C: "yy-mm-dd",
        _ticksTo1970: (718685 + Math.floor(492.5) - Math.floor(19.7) + Math.floor(4.925)) * 864e9,
        formatDate: function(n, t, i) {
            var u;
            if (!t) return "";
            var h = (i ? i.dayNamesShort: null) || this._defaults.dayNamesShort,
            c = (i ? i.dayNames: null) || this._defaults.dayNames,
            l = (i ? i.monthNamesShort: null) || this._defaults.monthNamesShort,
            a = (i ? i.monthNames: null) || this._defaults.monthNames,
            f = function(t) {
                var i = u + 1 < n.length && n.charAt(u + 1) == t;
                return i && u++,
                i
            },
            e = function(n, t, i) {
                var r = "" + t;
                if (f(n)) while (r.length < i) r = "0" + r;
                return r
            },
            s = function(n, t, i, r) {
                return f(n) ? r[t] : i[t]
            },
            r = "",
            o = !1;
            if (t) for (u = 0; u < n.length; u++) if (o) n.charAt(u) == "'" && !f("'") ? o = !1: r += n.charAt(u);
            else switch (n.charAt(u)) {
            case "d":
                r += e("d", t.getDate(), 2);
                break;
            case "D":
                r += s("D", t.getDay(), h, c);
                break;
            case "o":
                r += e("o", Math.round(( + new Date(t.getFullYear(), t.getMonth(), t.getDate()) - +new Date(t.getFullYear(), 0, 0)) / 864e5), 3);
                break;
            case "m":
                r += e("m", t.getMonth() + 1, 2);
                break;
            case "M":
                r += s("M", t.getMonth(), l, a);
                break;
            case "y":
                r += f("y") ? t.getFullYear() : (t.getYear() % 100 < 10 ? "0": "") + t.getYear() % 100;
                break;
            case "@":
                r += t.getTime();
                break;
            case "!":
                r += t.getTime() * 1e4 + this._ticksTo1970;
                break;
            case "'":
                f("'") ? r += "'": o = !0;
                break;
            default:
                r += n.charAt(u)
            }
            return r
        },
        _possibleChars: function(n) {
            for (var i = "", r = !1, u = function(i) {
                var r = t + 1 < n.length && n.charAt(t + 1) == i;
                return r && t++,
                r
            },
            t = 0; t < n.length; t++) if (r) n.charAt(t) == "'" && !u("'") ? r = !1: i += n.charAt(t);
            else switch (n.charAt(t)) {
            case "d":
            case "m":
            case "y":
            case "@":
                i += "0123456789";
                break;
            case "D":
            case "M":
                return null;
            case "'":
                u("'") ? i += "'": r = !0;
                break;
            default:
                i += n.charAt(t)
            }
            return i
        },
        _get: function(n, i) {
            return n.settings[i] !== t ? n.settings[i] : this._defaults[i]
        },
        _setDateFromField: function(n, t) {
            var u,
            r,
            i,
            f,
            e;
            if (n.input.val() != n.lastVal) {
                u = this._get(n, "dateFormat"),
                r = n.lastVal = n.input ? n.input.val() : null,
                i = f = this._getDefaultDate(n),
                e = this._getFormatConfig(n);
                try {
                    i = this.parseDate(u, r, e) || f
                } catch(o) {
                    this.log(o),
                    r = t ? "": r
                }
                n.selectedDay = i.getDate(),
                n.drawMonth = n.selectedMonth = i.getMonth(),
                n.drawYear = n.selectedYear = i.getFullYear(),
                n.currentDay = r ? i.getDate() : 0,
                n.currentMonth = r ? i.getMonth() : 0,
                n.currentYear = r ? i.getFullYear() : 0,
                this._adjustInstDate(n)
            }
        },
        _getDefaultDate: function(n) {
            return this._restrictMinMax(n, this._determineDate(n, this._get(n, "defaultDate"), new Date))
        },
        _determineDate: function(t, i, r) {
            var f = function(n) {
                var t = new Date;
                return t.setDate(t.getDate() + n),
                t
            },
            e = function(i) {
                try {
                    return n.datepicker.parseDate(n.datepicker._get(t, "dateFormat"), i, n.datepicker._getFormatConfig(t))
                } catch(h) {}
                for (var o = (i.toLowerCase().match(/^c/) ? n.datepicker._getDate(t) : null) || new Date, f = o.getFullYear(), e = o.getMonth(), r = o.getDate(), s = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, u = s.exec(i); u;) {
                    switch (u[2] || "d") {
                    case "d":
                    case "D":
                        r += parseInt(u[1], 10);
                        break;
                    case "w":
                    case "W":
                        r += parseInt(u[1], 10) * 7;
                        break;
                    case "m":
                    case "M":
                        e += parseInt(u[1], 10),
                        r = Math.min(r, n.datepicker._getDaysInMonth(f, e));
                        break;
                    case "y":
                    case "Y":
                        f += parseInt(u[1], 10),
                        r = Math.min(r, n.datepicker._getDaysInMonth(f, e))
                    }
                    u = s.exec(i)
                }
                return new Date(f, e, r)
            },
            u = i == null || i === "" ? r: typeof i == "string" ? e(i) : typeof i == "number" ? isNaN(i) ? r: f(i) : new Date(i.getTime());
            return u = u && u.toString() == "Invalid Date" ? r: u,
            u && (u.setHours(0), u.setMinutes(0), u.setSeconds(0), u.setMilliseconds(0)),
            this._daylightSavingAdjust(u)
        },
        _daylightSavingAdjust: function(n) {
            return n ? (n.setHours(n.getHours() > 12 ? n.getHours() + 2: 0), n) : null
        },
        _setDate: function(n, t, i) {
            var u = !t,
            f = n.selectedMonth,
            e = n.selectedYear,
            r = this._restrictMinMax(n, this._determineDate(n, t, new Date));
            n.selectedDay = n.currentDay = r.getDate(),
            n.drawMonth = n.selectedMonth = n.currentMonth = r.getMonth(),
            n.drawYear = n.selectedYear = n.currentYear = r.getFullYear(),
            (f != n.selectedMonth || e != n.selectedYear) && !i && this._notifyChange(n),
            this._adjustInstDate(n),
            n.input && n.input.val(u ? "": this._formatDate(n))
        },
        _getDate: function(n) {
            return ! n.currentYear || n.input && n.input.val() == "" ? null: this._daylightSavingAdjust(new Date(n.currentYear, n.currentMonth, n.currentDay))
        },
        _generateHTML: function(t) {
            var v = new Date,
            g,
            l,
            pt,
            c,
            d,
            st,
            w,
            ut,
            ct,
            ft,
            u,
            ot,
            ht,
            h;
            v = this._daylightSavingAdjust(new Date(v.getFullYear(), v.getMonth(), v.getDate()));
            var o = this._get(t, "isRTL"),
            ei = this._get(t, "showButtonPanel"),
            kt = this._get(t, "hideIfNoPrevNext"),
            vt = this._get(t, "navigationAsDateFormat"),
            s = this._getNumberOfMonths(t),
            oi = this._get(t, "showCurrentAtPos"),
            tt = this._get(t, "stepMonths"),
            yt = s[0] != 1 || s[1] != 1,
            wt = this._daylightSavingAdjust(t.currentDay ? new Date(t.currentYear, t.currentMonth, t.currentDay) : new Date(9999, 9, 9)),
            b = this._getMinMaxDate(t, "min"),
            a = this._getMinMaxDate(t, "max"),
            i = t.drawMonth - oi,
            f = t.drawYear;
            if (i < 0 && (i += 12, f--), a) for (g = this._daylightSavingAdjust(new Date(a.getFullYear(), a.getMonth() - s[0] * s[1] + 1, a.getDate())), g = b && g < b ? b: g; this._daylightSavingAdjust(new Date(f, i, 1)) > g;) i--,
            i < 0 && (i = 11, f--);
            t.drawMonth = i,
            t.drawYear = f,
            l = this._get(t, "prevText"),
            l = vt ? this.formatDate(l, this._daylightSavingAdjust(new Date(f, i - tt, 1)), this._getFormatConfig(t)) : l,
            pt = this._canAdjustMonth(t, -1, f, i) ? '<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_' + r + ".datepicker._adjustDate('#" + t.id + "', -" + tt + ", 'M');\" title=\"" + l + '"><span class="ui-icon ui-icon-circle-triangle-' + (o ? "e": "w") + '">' + l + "</span></a>": kt ? "": '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="' + l + '"><span class="ui-icon ui-icon-circle-triangle-' + (o ? "e": "w") + '">' + l + "</span></a>",
            c = this._get(t, "nextText"),
            c = vt ? this.formatDate(c, this._daylightSavingAdjust(new Date(f, i + tt, 1)), this._getFormatConfig(t)) : c;
            var ui = this._canAdjustMonth(t, 1, f, i) ? '<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_' + r + ".datepicker._adjustDate('#" + t.id + "', +" + tt + ", 'M');\" title=\"" + c + '"><span class="ui-icon ui-icon-circle-triangle-' + (o ? "w": "e") + '">' + c + "</span></a>": kt ? "": '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="' + c + '"><span class="ui-icon ui-icon-circle-triangle-' + (o ? "w": "e") + '">' + c + "</span></a>",
            nt = this._get(t, "currentText"),
            bt = this._get(t, "gotoCurrent") && t.currentDay ? wt: v;
            nt = vt ? this.formatDate(nt, bt, this._getFormatConfig(t)) : nt;
            var ii = t.inline ? "": '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_' + r + '.datepicker._hideDatepicker();">' + this._get(t, "closeText") + "</button>",
            vi = ei ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (o ? ii: "") + (this._isInRange(t, bt) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_' + r + ".datepicker._gotoToday('#" + t.id + "');\">" + nt + "</button>": "") + (o ? "": ii) + "</div>": "",
            y = parseInt(this._get(t, "firstDay"), 10);
            y = isNaN(y) ? 0: y;
            var ni = this._get(t, "showWeek"),
            hi = this._get(t, "dayNames"),
            pi = this._get(t, "dayNamesShort"),
            ci = this._get(t, "dayNamesMin"),
            li = this._get(t, "monthNames"),
            si = this._get(t, "monthNamesShort"),
            ri = this._get(t, "beforeShowDay"),
            lt = this._get(t, "showOtherMonths"),
            ai = this._get(t, "selectOtherMonths"),
            yi = this._get(t, "calculateWeek") || this.iso8601Week,
            dt = this._getDefaultDate(t),
            rt = "";
            for (d = 0; d < s[0]; d++) {
                for (st = "", this.maxRows = 4, w = 0; w < s[1]; w++) {
                    var ti = this._daylightSavingAdjust(new Date(f, i, t.selectedDay)),
                    p = " ui-corner-all",
                    e = "";
                    if (yt) {
                        if (e += '<div class="ui-datepicker-group', s[1] > 1) switch (w) {
                        case 0:
                            e += " ui-datepicker-group-first",
                            p = " ui-corner-" + (o ? "right": "left");
                            break;
                        case s[1] - 1: e += " ui-datepicker-group-last",
                            p = " ui-corner-" + (o ? "left": "right");
                            break;
                        default:
                            e += " ui-datepicker-group-middle",
                            p = ""
                        }
                        e += '">'
                    }
                    for (e += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + p + '">' + (/all|left/.test(p) && d == 0 ? o ? ui: pt: "") + (/all|right/.test(p) && d == 0 ? o ? pt: ui: "") + this._generateMonthYearHeader(t, i, f, b, a, d > 0 || w > 0, li, si) + '</div><table class="ui-datepicker-calendar"><thead><tr>', ut = ni ? '<th class="ui-datepicker-week-col">' + this._get(t, "weekHeader") + "</th>": "", h = 0; h < 7; h++) ct = (h + y) % 7,
                    ut += "<th" + ((h + y + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"': "") + '><span title="' + hi[ct] + '">' + ci[ct] + "</span></th>";
                    e += ut + "</tr></thead><tbody>",
                    ft = this._getDaysInMonth(f, i),
                    f == t.selectedYear && i == t.selectedMonth && (t.selectedDay = Math.min(t.selectedDay, ft));
                    var fi = (this._getFirstDayOfMonth(f, i) - y + 7) % 7,
                    et = Math.ceil((fi + ft) / 7),
                    gt = yt ? this.maxRows > et ? this.maxRows: et: et;
                    for (this.maxRows = gt, u = this._daylightSavingAdjust(new Date(f, i, 1 - fi)), ot = 0; ot < gt; ot++) {
                        for (e += "<tr>", ht = ni ? '<td class="ui-datepicker-week-col">' + this._get(t, "calculateWeek")(u) + "</td>": "", h = 0; h < 7; h++) {
                            var it = ri ? ri.apply(t.input ? t.input[0] : null, [u]) : [!0, ""],
                            k = u.getMonth() != i,
                            at = k && !ai || !it[0] || b && u < b || a && u > a;
                            ht += '<td class="' + ((h + y + 6) % 7 >= 5 ? " ui-datepicker-week-end": "") + (k ? " ui-datepicker-other-month": "") + (u.getTime() == ti.getTime() && i == t.selectedMonth && t._keyEvent || dt.getTime() == u.getTime() && dt.getTime() == ti.getTime() ? " " + this._dayOverClass: "") + (at ? " " + this._unselectableClass + " ui-state-disabled": "") + (k && !lt ? "": " " + it[1] + (u.getTime() == wt.getTime() ? " " + this._currentClass: "") + (u.getTime() == v.getTime() ? " ui-datepicker-today": "")) + '"' + ((!k || lt) && it[2] ? ' title="' + it[2] + '"': "") + (at ? "": ' onclick="DP_jQuery_' + r + ".datepicker._selectDay('#" + t.id + "'," + u.getMonth() + "," + u.getFullYear() + ', this);return false;"') + ">" + (k && !lt ? "&#xa0;": at ? '<span class="ui-state-default">' + u.getDate() + "</span>": '<a class="ui-state-default' + (u.getTime() == v.getTime() ? " ui-state-highlight": "") + (u.getTime() == wt.getTime() ? " ui-state-active": "") + (k ? " ui-priority-secondary": "") + '" href="#">' + u.getDate() + "</a>") + "</td>",
                            u.setDate(u.getDate() + 1),
                            u = this._daylightSavingAdjust(u)
                        }
                        e += ht + "</tr>"
                    }
                    i++,
                    i > 11 && (i = 0, f++),
                    e += "</tbody></table>" + (yt ? "</div>" + (s[0] > 0 && w == s[1] - 1 ? '<div class="ui-datepicker-row-break"></div>': "") : ""),
                    st += e
                }
                rt += st
            }
            return rt += vi + (n.browser.msie && parseInt(n.browser.version, 10) < 7 && !t.inline ? '<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>': ""),
            t._keyEvent = !1,
            rt
        },
        _generateMonthYearHeader: function(n, t, i, u, f, e, o, s) {
            var y = this._get(n, "changeMonth"),
            p = this._get(n, "changeYear"),
            nt = this._get(n, "showMonthAfterYear"),
            l = '<div class="ui-datepicker-title">',
            a = "",
            w,
            b,
            c;
            if (e || !y) a += '<span class="ui-datepicker-month">' + o[t] + "</span>";
            else {
                for (w = u && u.getFullYear() == i, b = f && f.getFullYear() == i, a += '<select class="ui-datepicker-month" onchange="DP_jQuery_' + r + ".datepicker._selectMonthYear('#" + n.id + "', this, 'M');\" >", c = 0; c < 12; c++)(!w || c >= u.getMonth()) && (!b || c <= f.getMonth()) && (a += '<option value="' + c + '"' + (c == t ? ' selected="selected"': "") + ">" + s[c] + "</option>");
                a += "</select>"
            }
            if (nt || (l += a + (e || !y || !p ? "&#xa0;": "")), !n.yearshtml) if (n.yearshtml = "", e || !p) l += '<span class="ui-datepicker-year">' + i + "</span>";
            else {
                var k = this._get(n, "yearRange").split(":"),
                d = (new Date).getFullYear(),
                g = function(n) {
                    var t = n.match(/c[+-].*/) ? i + parseInt(n.substring(1), 10) : n.match(/[+-].*/) ? d + parseInt(n, 10) : parseInt(n, 10);
                    return isNaN(t) ? d: t
                },
                h = g(k[0]),
                v = Math.max(h, g(k[1] || ""));
                for (h = u ? Math.max(h, u.getFullYear()) : h, v = f ? Math.min(v, f.getFullYear()) : v, n.yearshtml += '<select class="ui-datepicker-year" onchange="DP_jQuery_' + r + ".datepicker._selectMonthYear('#" + n.id + "', this, 'Y');\" >"; h <= v; h++) n.yearshtml += '<option value="' + h + '"' + (h == i ? ' selected="selected"': "") + ">" + h + "</option>";
                n.yearshtml += "</select>",
                l += n.yearshtml,
                n.yearshtml = null
            }
            return l += this._get(n, "yearSuffix"),
            nt && (l += (e || !y || !p ? "&#xa0;": "") + a),
            l += "</div>",
            l
        },
        _adjustInstDate: function(n, t, i) {
            var u = n.drawYear + (i == "Y" ? t: 0),
            f = n.drawMonth + (i == "M" ? t: 0),
            e = Math.min(n.selectedDay, this._getDaysInMonth(u, f)) + (i == "D" ? t: 0),
            r = this._restrictMinMax(n, this._daylightSavingAdjust(new Date(u, f, e)));
            n.selectedDay = r.getDate(),
            n.drawMonth = n.selectedMonth = r.getMonth(),
            n.drawYear = n.selectedYear = r.getFullYear(),
            (i == "M" || i == "Y") && this._notifyChange(n)
        },
        _restrictMinMax: function(n, t) {
            var r = this._getMinMaxDate(n, "min"),
            u = this._getMinMaxDate(n, "max"),
            i = r && t < r ? r: t;
            return i = u && i > u ? u: i
        },
        _notifyChange: function(n) {
            var t = this._get(n, "onChangeMonthYear");
            t && t.apply(n.input ? n.input[0] : null, [n.selectedYear, n.selectedMonth + 1, n])
        },
        _getNumberOfMonths: function(n) {
            var t = this._get(n, "numberOfMonths");
            return t == null ? [1, 1] : typeof t == "number" ? [1, t] : t
        },
        _getMinMaxDate: function(n, t) {
            return this._determineDate(n, this._get(n, t + "Date"), null)
        },
        _getDaysInMonth: function(n, t) {
            return 32 - this._daylightSavingAdjust(new Date(n, t, 32)).getDate()
        },
        _getFirstDayOfMonth: function(n, t) {
            return new Date(n, t, 1).getDay()
        },
        _canAdjustMonth: function(n, t, i, r) {
            var f = this._getNumberOfMonths(n),
            u = this._daylightSavingAdjust(new Date(i, r + (t < 0 ? t: f[0] * f[1]), 1));
            return t < 0 && u.setDate(this._getDaysInMonth(u.getFullYear(), u.getMonth())),
            this._isInRange(n, u)
        },
        _isInRange: function(n, t) {
            var i = this._getMinMaxDate(n, "min"),
            r = this._getMinMaxDate(n, "max");
            return (!i || t.getTime() >= i.getTime()) && (!r || t.getTime() <= r.getTime())
        },
        _getFormatConfig: function(n) {
            var t = this._get(n, "shortYearCutoff");
            return t = typeof t != "string" ? t: (new Date).getFullYear() % 100 + parseInt(t, 10),
            {
                shortYearCutoff: t,
                dayNamesShort: this._get(n, "dayNamesShort"),
                dayNames: this._get(n, "dayNames"),
                monthNamesShort: this._get(n, "monthNamesShort"),
                monthNames: this._get(n, "monthNames")
            }
        },
        _formatDate: function(n, t, i, r) {
            t || (n.currentDay = n.selectedDay, n.currentMonth = n.selectedMonth, n.currentYear = n.selectedYear);
            var u = t ? typeof t == "object" ? t: this._daylightSavingAdjust(new Date(r, i, t)) : this._daylightSavingAdjust(new Date(n.currentYear, n.currentMonth, n.currentDay));
            return this.formatDate(this._get(n, "dateFormat"), u, this._getFormatConfig(n))
        }
    }),
    n.fn.datepicker = function(t) {
        if (!this.length) return this;
        n.datepicker.initialized || (n(document).mousedown(n.datepicker._checkExternalClick).find("body").append(n.datepicker.dpDiv), n.datepicker.initialized = !0);
        var i = Array.prototype.slice.call(arguments, 1);
        return typeof t == "string" && (t == "isDisabled" || t == "getDate" || t == "widget") ? n.datepicker["_" + t + "Datepicker"].apply(n.datepicker, [this[0]].concat(i)) : t == "option" && arguments.length == 2 && typeof arguments[1] == "string" ? n.datepicker["_" + t + "Datepicker"].apply(n.datepicker, [this[0]].concat(i)) : this.each(function() {
            typeof t == "string" ? n.datepicker["_" + t + "Datepicker"].apply(n.datepicker, [this].concat(i)) : n.datepicker._attachDatepicker(this, t)
        })
    },
    n.datepicker = new o,
    n.datepicker.initialized = !1,
    n.datepicker.uuid = +new Date,
    n.datepicker.version = "1.8.18",
    window["DP_jQuery_" + r] = n
} (jQuery),
function(n, t) {
    var i = "ui-dialog ui-widget ui-widget-content ui-corner-all ",
    r = {
        buttons: !0,
        height: !0,
        maxHeight: !0,
        maxWidth: !0,
        minHeight: !0,
        minWidth: !0,
        width: !0
    },
    u = {
        maxHeight: !0,
        maxWidth: !0,
        minHeight: !0,
        minWidth: !0
    },
    f = n.attrFn || {
        val: !0,
        css: !0,
        html: !0,
        text: !0,
        data: !0,
        width: !0,
        height: !0,
        offset: !0,
        click: !0
    };
    n.widget("ui.dialog", {
        options: {
            autoOpen: !0,
            buttons: {},
            closeOnEscape: !0,
            closeText: "close",
            dialogClass: "",
            draggable: !0,
            hide: null,
            height: "auto",
            maxHeight: !1,
            maxWidth: !1,
            minHeight: 150,
            minWidth: 150,
            modal: !1,
            position: {
                my: "center",
                at: "center",
                collision: "fit",
                using: function(t) {
                    var i = n(this).css(t).offset().top;
                    i < 0 && n(this).css("top", t.top - i)
                }
            },
            resizable: !0,
            show: null,
            stack: !0,
            title: "",
            width: 300,
            zIndex: 1e3
        },
        _create: function() {
            this.originalTitle = this.element.attr("title"),
            typeof this.originalTitle != "string" && (this.originalTitle = ""),
            this.options.title = this.options.title || this.originalTitle;
            var t = this,
            r = t.options,
            s = r.title || "&#160;",
            o = n.ui.dialog.getTitleId(t.element),
            e = (t.uiDialog = n("<div></div>")).appendTo(document.body).hide().addClass(i + r.dialogClass).css({
                zIndex: r.zIndex
            }).attr("tabIndex", -1).css("outline", 0).keydown(function(i) {
                r.closeOnEscape && !i.isDefaultPrevented() && i.keyCode && i.keyCode === n.ui.keyCode.ESCAPE && (t.close(i), i.preventDefault())
            }).attr({
                role: "dialog",
                "aria-labelledby": o
            }).mousedown(function(n) {
                t.moveToTop(!1, n)
            }),
            h = t.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(e),
            f = (t.uiDialogTitlebar = n("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(e),
            u = n('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role", "button").hover(function() {
                u.addClass("ui-state-hover")
            },
            function() {
                u.removeClass("ui-state-hover")
            }).focus(function() {
                u.addClass("ui-state-focus")
            }).blur(function() {
                u.removeClass("ui-state-focus")
            }).click(function(n) {
                return t.close(n),
                !1
            }).appendTo(f),
            c = (t.uiDialogTitlebarCloseText = n("<span></span>")).addClass("ui-icon ui-icon-closethick").text(r.closeText).appendTo(u),
            l = n("<span></span>").addClass("ui-dialog-title").attr("id", o).html(s).prependTo(f);
            n.isFunction(r.beforeclose) && !n.isFunction(r.beforeClose) && (r.beforeClose = r.beforeclose),
            f.find("*").add(f).disableSelection(),
            r.draggable && n.fn.draggable && t._makeDraggable(),
            r.resizable && n.fn.resizable && t._makeResizable(),
            t._createButtons(r.buttons),
            t._isOpen = !1,
            n.fn.bgiframe && e.bgiframe()
        },
        _init: function() {
            this.options.autoOpen && this.open()
        },
        destroy: function() {
            var n = this;
            return n.overlay && n.overlay.destroy(),
            n.uiDialog.hide(),
            n.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),
            n.uiDialog.remove(),
            n.originalTitle && n.element.attr("title", n.originalTitle),
            n
        },
        widget: function() {
            return this.uiDialog
        },
        close: function(t) {
            var i = this,
            r,
            u;
            if (!1 !== i._trigger("beforeClose", t)) return i.overlay && i.overlay.destroy(),
            i.uiDialog.unbind("keypress.ui-dialog"),
            i._isOpen = !1,
            i.options.hide ? i.uiDialog.hide(i.options.hide, 
            function() {
                i._trigger("close", t)
            }) : (i.uiDialog.hide(), i._trigger("close", t)),
            n.ui.dialog.overlay.resize(),
            i.options.modal && (r = 0, n(".ui-dialog").each(function() {
                this !== i.uiDialog[0] && (u = n(this).css("z-index"), isNaN(u) || (r = Math.max(r, u)))
            }), n.ui.dialog.maxZ = r),
            i
        },
        isOpen: function() {
            return this._isOpen
        },
        moveToTop: function(t, i) {
            var r = this,
            u = r.options,
            f;
            return u.modal && !t || !u.stack && !u.modal ? r._trigger("focus", i) : (u.zIndex > n.ui.dialog.maxZ && (n.ui.dialog.maxZ = u.zIndex), r.overlay && (n.ui.dialog.maxZ += 1, r.overlay.$el.css("z-index", n.ui.dialog.overlay.maxZ = n.ui.dialog.maxZ)), f = {
                scrollTop: r.element.scrollTop(),
                scrollLeft: r.element.scrollLeft()
            },
            n.ui.dialog.maxZ += 1, r.uiDialog.css("z-index", n.ui.dialog.maxZ), r.element.attr(f), r._trigger("focus", i), r)
        },
        open: function() {
            if (!this._isOpen) {
                var t = this,
                i = t.options,
                r = t.uiDialog;
                return t.overlay = i.modal ? new n.ui.dialog.overlay(t) : null,
                t._size(),
                t._position(i.position),
                r.show(i.show),
                t.moveToTop(!0),
                i.modal && r.bind("keydown.ui-dialog", 
                function(t) {
                    if (t.keyCode === n.ui.keyCode.TAB) {
                        var i = n(":tabbable", this),
                        r = i.filter(":first"),
                        u = i.filter(":last");
                        if (t.target === u[0] && !t.shiftKey) return r.focus(1),
                        !1;
                        if (t.target === r[0] && t.shiftKey) return u.focus(1),
                        !1
                    }
                }),
                n(t.element.find(":tabbable").get().concat(r.find(".ui-dialog-buttonpane :tabbable").get().concat(r.get()))).eq(0).focus(),
                t._isOpen = !0,
                t._trigger("open"),
                t
            }
        },
        _createButtons: function(t) {
            var i = this,
            r = !1,
            u = n("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),
            e = n("<div></div>").addClass("ui-dialog-buttonset").appendTo(u);
            i.uiDialog.find(".ui-dialog-buttonpane").remove(),
            typeof t == "object" && t !== null && n.each(t, 
            function() {
                return ! (r = !0)
            }),
            r && (n.each(t, 
            function(t, r) {
                r = n.isFunction(r) ? {
                    click: r,
                    text: t
                }: r;
                var u = n('<button type="button"></button>').click(function() {
                    r.click.apply(i.element[0], arguments)
                }).appendTo(e);
                n.each(r, 
                function(n, t) {
                    n !== "click" && (n in f ? u[n](t) : u.attr(n, t))
                }),
                n.fn.button && u.button()
            }), u.appendTo(i.uiDialog))
        },
        _makeDraggable: function() {
            function i(n) {
                return {
                    position: n.position,
                    offset: n.offset
                }
            }
            var t = this,
            r = t.options,
            u = n(document),
            f;
            t.uiDialog.draggable({
                cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
                handle: ".ui-dialog-titlebar",
                containment: "document",
                start: function(u, e) {
                    f = r.height === "auto" ? "auto": n(this).height(),
                    n(this).height(n(this).height()).addClass("ui-dialog-dragging"),
                    t._trigger("dragStart", u, i(e))
                },
                drag: function(n, r) {
                    t._trigger("drag", n, i(r))
                },
                stop: function(e, o) {
                    r.position = [o.position.left - u.scrollLeft(), o.position.top - u.scrollTop()],
                    n(this).removeClass("ui-dialog-dragging").height(f),
                    t._trigger("dragStop", e, i(o)),
                    n.ui.dialog.overlay.resize()
                }
            })
        },
        _makeResizable: function(i) {
            function f(n) {
                return {
                    originalPosition: n.originalPosition,
                    originalSize: n.originalSize,
                    position: n.position,
                    size: n.size
                }
            }
            i = i === t ? this.options.resizable: i;
            var r = this,
            u = r.options,
            e = r.uiDialog.css("position"),
            o = typeof i == "string" ? i: "n,e,s,w,se,sw,ne,nw";
            r.uiDialog.resizable({
                cancel: ".ui-dialog-content",
                containment: "document",
                alsoResize: r.element,
                maxWidth: u.maxWidth,
                maxHeight: u.maxHeight,
                minWidth: u.minWidth,
                minHeight: r._minHeight(),
                handles: o,
                start: function(t, i) {
                    n(this).addClass("ui-dialog-resizing"),
                    r._trigger("resizeStart", t, f(i))
                },
                resize: function(n, t) {
                    r._trigger("resize", n, f(t))
                },
                stop: function(t, i) {
                    n(this).removeClass("ui-dialog-resizing"),
                    u.height = n(this).height(),
                    u.width = n(this).width(),
                    r._trigger("resizeStop", t, f(i)),
                    n.ui.dialog.overlay.resize()
                }
            }).css("position", e).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")
        },
        _minHeight: function() {
            var n = this.options;
            return n.height === "auto" ? n.minHeight: Math.min(n.minHeight, n.height)
        },
        _position: function(t) {
            var i = [],
            u = [0, 0],
            r;
            t ? ((typeof t == "string" || typeof t == "object" && "0" in t) && (i = t.split ? t.split(" ") : [t[0], t[1]], i.length === 1 && (i[1] = i[0]), n.each(["left", "top"], 
            function(n, t) { + i[n] === i[n] && (u[n] = i[n], i[n] = t)
            }), t = {
                my: i.join(" "),
                at: i.join(" "),
                offset: u.join(" ")
            }), t = n.extend({},
            n.ui.dialog.prototype.options.position, t)) : t = n.ui.dialog.prototype.options.position,
            r = this.uiDialog.is(":visible"),
            r || this.uiDialog.show(),
            this.uiDialog.css({
                top: 0,
                left: 0
            }).position(n.extend({
                of: window
            },
            t)),
            r || this.uiDialog.hide()
        },
        _setOptions: function(t) {
            var e = this,
            i = {},
            f = !1;
            n.each(t, 
            function(n, t) {
                e._setOption(n, t),
                n in r && (f = !0),
                n in u && (i[n] = t)
            }),
            f && this._size(),
            this.uiDialog.is(":data(resizable)") && this.uiDialog.resizable("option", i)
        },
        _setOption: function(t, r) {
            var u = this,
            f = u.uiDialog,
            o,
            e;
            switch (t) {
            case "beforeclose":
                t = "beforeClose";
                break;
            case "buttons":
                u._createButtons(r);
                break;
            case "closeText":
                u.uiDialogTitlebarCloseText.text("" + r);
                break;
            case "dialogClass":
                f.removeClass(u.options.dialogClass).addClass(i + r);
                break;
            case "disabled":
                r ? f.addClass("ui-dialog-disabled") : f.removeClass("ui-dialog-disabled");
                break;
            case "draggable":
                o = f.is(":data(draggable)"),
                o && !r && f.draggable("destroy"),
                !o && r && u._makeDraggable();
                break;
            case "position":
                u._position(r);
                break;
            case "resizable":
                e = f.is(":data(resizable)"),
                e && !r && f.resizable("destroy"),
                e && typeof r == "string" && f.resizable("option", "handles", r),
                !e && r !== !1 && u._makeResizable(r);
                break;
            case "title":
                n(".ui-dialog-title", u.uiDialogTitlebar).html("" + (r || "&#160;"))
            }
            n.Widget.prototype._setOption.apply(u, arguments)
        },
        _size: function() {
            var t = this.options,
            i,
            r,
            f = this.uiDialog.is(":visible"),
            u;
            this.element.show().css({
                width: "auto",
                minHeight: 0,
                height: 0
            }),
            t.minWidth > t.width && (t.width = t.minWidth),
            i = this.uiDialog.css({
                height: "auto",
                width: t.width
            }).height(),
            r = Math.max(0, t.minHeight - i),
            t.height === "auto" ? n.support.minHeight ? this.element.css({
                minHeight: r,
                height: "auto"
            }) : (this.uiDialog.show(), u = this.element.css("height", "auto").height(), f || this.uiDialog.hide(), this.element.height(Math.max(u, r))) : this.element.height(Math.max(t.height - i, 0)),
            this.uiDialog.is(":data(resizable)") && this.uiDialog.resizable("option", "minHeight", this._minHeight())
        }
    }),
    n.extend(n.ui.dialog, {
        version: "1.8.18",
        uuid: 0,
        maxZ: 0,
        getTitleId: function(n) {
            var t = n.attr("id");
            return t || (this.uuid += 1, t = this.uuid),
            "ui-dialog-title-" + t
        },
        overlay: function(t) {
            this.$el = n.ui.dialog.overlay.create(t)
        }
    }),
    n.extend(n.ui.dialog.overlay, {
        instances: [],
        oldInstances: [],
        maxZ: 0,
        events: n.map("focus,mousedown,mouseup,keydown,keypress,click".split(","), 
        function(n) {
            return n + ".dialog-overlay"
        }).join(" "),
        create: function(t) {
            this.instances.length === 0 && (setTimeout(function() {
                n.ui.dialog.overlay.instances.length && n(document).bind(n.ui.dialog.overlay.events, 
                function(t) {
                    if (n(t.target).zIndex() < n.ui.dialog.overlay.maxZ) return ! 1
                })
            },
            1), n(document).bind("keydown.dialog-overlay", 
            function(i) {
                t.options.closeOnEscape && !i.isDefaultPrevented() && i.keyCode && i.keyCode === n.ui.keyCode.ESCAPE && (t.close(i), i.preventDefault())
            }), n(window).bind("resize.dialog-overlay", n.ui.dialog.overlay.resize));
            var i = (this.oldInstances.pop() || n("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({
                width: this.width(),
                height: this.height()
            });
            return n.fn.bgiframe && i.bgiframe(),
            this.instances.push(i),
            i
        },
        destroy: function(t) {
            var r = n.inArray(t, this.instances),
            i;
            r != -1 && this.oldInstances.push(this.instances.splice(r, 1)[0]),
            this.instances.length === 0 && n([document, window]).unbind(".dialog-overlay"),
            t.remove(),
            i = 0,
            n.each(this.instances, 
            function() {
                i = Math.max(i, this.css("z-index"))
            }),
            this.maxZ = i
        },
        height: function() {
            var t,
            i;
            return n.browser.msie && n.browser.version < 7 ? (t = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight), i = Math.max(document.documentElement.offsetHeight, document.body.offsetHeight), t < i ? n(window).height() + "px": t + "px") : n(document).height() + "px"
        },
        width: function() {
            var t,
            i;
            return n.browser.msie ? (t = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth), i = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth), t < i ? n(window).width() + "px": t + "px") : n(document).width() + "px"
        },
        resize: function() {
            var t = n([]);
            n.each(n.ui.dialog.overlay.instances, 
            function() {
                t = t.add(this)
            }),
            t.css({
                width: 0,
                height: 0
            }).css({
                width: n.ui.dialog.overlay.width(),
                height: n.ui.dialog.overlay.height()
            })
        }
    }),
    n.extend(n.ui.dialog.overlay.prototype, {
        destroy: function() {
            n.ui.dialog.overlay.destroy(this.$el)
        }
    })
} (jQuery),
function(n) {
    n.ui = n.ui || {};
    var r = /left|center|right/,
    u = /top|center|bottom/,
    i = "center",
    f = {},
    e = n.fn.position,
    o = n.fn.offset;
    n.fn.position = function(t) {
        if (!t || !t.of) return e.apply(this, arguments);
        t = n.extend({},
        t);
        var s = n(t.of),
        v = s[0],
        a = (t.collision || "flip").split(" "),
        h = t.offset ? t.offset.split(" ") : [0, 0],
        c,
        l,
        o;
        return v.nodeType === 9 ? (c = s.width(), l = s.height(), o = {
            top: 0,
            left: 0
        }) : v.setTimeout ? (c = s.width(), l = s.height(), o = {
            top: s.scrollTop(),
            left: s.scrollLeft()
        }) : v.preventDefault ? (t.at = "left top", c = l = 0, o = {
            top: t.of.pageY,
            left: t.of.pageX
        }) : (c = s.outerWidth(), l = s.outerHeight(), o = s.offset()),
        n.each(["my", "at"], 
        function() {
            var n = (t[this] || "").split(" ");
            n.length === 1 && (n = r.test(n[0]) ? n.concat([i]) : u.test(n[0]) ? [i].concat(n) : [i, i]),
            n[0] = r.test(n[0]) ? n[0] : i,
            n[1] = u.test(n[1]) ? n[1] : i,
            t[this] = n
        }),
        a.length === 1 && (a[1] = a[0]),
        h[0] = parseInt(h[0], 10) || 0,
        h.length === 1 && (h[1] = h[0]),
        h[1] = parseInt(h[1], 10) || 0,
        t.at[0] === "right" ? o.left += c: t.at[0] === i && (o.left += c / 2),
        t.at[1] === "bottom" ? o.top += l: t.at[1] === i && (o.top += l / 2),
        o.left += h[0],
        o.top += h[1],
        this.each(function() {
            var u = n(this),
            e = u.outerWidth(),
            s = u.outerHeight(),
            v = parseInt(n.curCSS(this, "marginLeft", !0)) || 0,
            y = parseInt(n.curCSS(this, "marginTop", !0)) || 0,
            w = e + v + (parseInt(n.curCSS(this, "marginRight", !0)) || 0),
            b = s + y + (parseInt(n.curCSS(this, "marginBottom", !0)) || 0),
            r = n.extend({},
            o),
            p;
            t.my[0] === "right" ? r.left -= e: t.my[0] === i && (r.left -= e / 2),
            t.my[1] === "bottom" ? r.top -= s: t.my[1] === i && (r.top -= s / 2),
            f.fractions || (r.left = Math.round(r.left), r.top = Math.round(r.top)),
            p = {
                left: r.left - v,
                top: r.top - y
            },
            n.each(["left", "top"], 
            function(i, u) {
                n.ui.position[a[i]] && n.ui.position[a[i]][u](r, {
                    targetWidth: c,
                    targetHeight: l,
                    elemWidth: e,
                    elemHeight: s,
                    collisionPosition: p,
                    collisionWidth: w,
                    collisionHeight: b,
                    offset: h,
                    my: t.my,
                    at: t.at
                })
            }),
            n.fn.bgiframe && u.bgiframe(),
            u.offset(n.extend(r, {
                using: t.using
            }))
        })
    },
    n.ui.position = {
        fit: {
            left: function(t, i) {
                var r = n(window),
                u = i.collisionPosition.left + i.collisionWidth - r.width() - r.scrollLeft();
                t.left = u > 0 ? t.left - u: Math.max(t.left - i.collisionPosition.left, t.left)
            },
            top: function(t, i) {
                var r = n(window),
                u = i.collisionPosition.top + i.collisionHeight - r.height() - r.scrollTop();
                t.top = u > 0 ? t.top - u: Math.max(t.top - i.collisionPosition.top, t.top)
            }
        },
        flip: {
            left: function(t, r) {
                if (r.at[0] !== i) {
                    var u = n(window),
                    s = r.collisionPosition.left + r.collisionWidth - u.width() - u.scrollLeft(),
                    f = r.my[0] === "left" ? -r.elemWidth: r.my[0] === "right" ? r.elemWidth: 0,
                    e = r.at[0] === "left" ? r.targetWidth: -r.targetWidth,
                    o = -2 * r.offset[0];
                    t.left += r.collisionPosition.left < 0 ? f + e + o: s > 0 ? f + e + o: 0
                }
            },
            top: function(t, r) {
                if (r.at[1] !== i) {
                    var u = n(window),
                    s = r.collisionPosition.top + r.collisionHeight - u.height() - u.scrollTop(),
                    f = r.my[1] === "top" ? -r.elemHeight: r.my[1] === "bottom" ? r.elemHeight: 0,
                    e = r.at[1] === "top" ? r.targetHeight: -r.targetHeight,
                    o = -2 * r.offset[1];
                    t.top += r.collisionPosition.top < 0 ? f + e + o: s > 0 ? f + e + o: 0
                }
            }
        }
    },
    n.offset.setOffset || (n.offset.setOffset = function(t, i) { / static / .test(n.curCSS(t, "position")) && (t.style.position = "relative");
        var r = n(t),
        u = r.offset(),
        e = parseInt(n.curCSS(t, "top", !0), 10) || 0,
        o = parseInt(n.curCSS(t, "left", !0), 10) || 0,
        f = {
            top: i.top - u.top + e,
            left: i.left - u.left + o
        };
        "using" in i ? i.using.call(t, f) : r.css(f)
    },
    n.fn.offset = function(t) {
        var i = this[0];
        return ! i || !i.ownerDocument ? null: t ? this.each(function() {
            n.offset.setOffset(this, t)
        }) : o.call(this)
    }),
    function() {
        var i = document.getElementsByTagName("body")[0],
        e = document.createElement("div"),
        t,
        r,
        u,
        o,
        s,
        h;
        t = document.createElement(i ? "div": "body"),
        u = {
            visibility: "hidden",
            width: 0,
            height: 0,
            border: 0,
            margin: 0,
            background: "none"
        },
        i && n.extend(u, {
            position: "absolute",
            left: "-1000px",
            top: "-1000px"
        });
        for (h in u) t.style[h] = u[h];
        t.appendChild(e),
        r = i || document.documentElement,
        r.insertBefore(t, r.firstChild),
        e.style.cssText = "position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",
        o = n(e).offset(function(n, t) {
            return t
        }).offset(),
        t.innerHTML = "",
        r.removeChild(t),
        s = o.top + o.left + (i ? 2e3: 0),
        f.fractions = s > 21 && s < 22
    } ()
} (jQuery),
function(n, t) {
    n.widget("ui.progressbar", {
        options: {
            value: 0,
            max: 100
        },
        min: 0,
        _create: function() {
            this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({
                role: "progressbar",
                "aria-valuemin": this.min,
                "aria-valuemax": this.options.max,
                "aria-valuenow": this._value()
            }),
            this.valueDiv = n("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),
            this.oldValue = this._value(),
            this._refreshValue()
        },
        destroy: function() {
            this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),
            this.valueDiv.remove(),
            n.Widget.prototype.destroy.apply(this, arguments)
        },
        value: function(n) {
            return n === t ? this._value() : (this._setOption("value", n), this)
        },
        _setOption: function(t, i) {
            t === "value" && (this.options.value = i, this._refreshValue(), this._value() === this.options.max && this._trigger("complete")),
            n.Widget.prototype._setOption.apply(this, arguments)
        },
        _value: function() {
            var n = this.options.value;
            return typeof n != "number" && (n = 0),
            Math.min(this.options.max, Math.max(this.min, n))
        },
        _percentage: function() {
            return 100 * this._value() / this.options.max
        },
        _refreshValue: function() {
            var n = this.value(),
            t = this._percentage();
            this.oldValue !== n && (this.oldValue = n, this._trigger("change")),
            this.valueDiv.toggle(n > this.min).toggleClass("ui-corner-right", n === this.options.max).width(t.toFixed(0) + "%"),
            this.element.attr("aria-valuenow", n)
        }
    }),
    n.extend(n.ui.progressbar, {
        version: "1.8.18"
    })
} (jQuery),
function(n) {
    var i = 5;
    n.widget("ui.slider", n.ui.mouse, {
        widgetEventPrefix: "slide",
        options: {
            animate: !1,
            distance: 0,
            max: 100,
            min: 0,
            orientation: "horizontal",
            range: !1,
            step: 1,
            value: 0,
            values: null
        },
        _create: function() {
            var t = this,
            r = this.options,
            f = this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),
            o = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
            s = r.values && r.values.length || 1,
            e = [],
            u;
            for (this._keySliding = !1, this._mouseSliding = !1, this._animateOff = !0, this._handleIndex = null, this._detectOrientation(), this._mouseInit(), this.element.addClass("ui-slider ui-slider-" + this.orientation + " ui-widget ui-widget-content ui-corner-all" + (r.disabled ? " ui-slider-disabled ui-disabled": "")), this.range = n([]), r.range && (r.range === !0 && (r.values || (r.values = [this._valueMin(), this._valueMin()]), r.values.length && r.values.length !== 2 && (r.values = [r.values[0], r.values[0]])), this.range = n("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header" + (r.range === "min" || r.range === "max" ? " ui-slider-range-" + r.range: ""))), u = f.length; u < s; u += 1) e.push(o);
            this.handles = f.add(n(e.join("")).appendTo(t.element)),
            this.handle = this.handles.eq(0),
            this.handles.add(this.range).filter("a").click(function(n) {
                n.preventDefault()
            }).hover(function() {
                r.disabled || n(this).addClass("ui-state-hover")
            },
            function() {
                n(this).removeClass("ui-state-hover")
            }).focus(function() {
                r.disabled ? n(this).blur() : (n(".ui-slider .ui-state-focus").removeClass("ui-state-focus"), n(this).addClass("ui-state-focus"))
            }).blur(function() {
                n(this).removeClass("ui-state-focus")
            }),
            this.handles.each(function(t) {
                n(this).data("index.ui-slider-handle", t)
            }),
            this.handles.keydown(function(r) {
                var e = n(this).data("index.ui-slider-handle"),
                s,
                f,
                u,
                o;
                if (!t.options.disabled) {
                    switch (r.keyCode) {
                    case n.ui.keyCode.HOME:
                    case n.ui.keyCode.END:
                    case n.ui.keyCode.PAGE_UP:
                    case n.ui.keyCode.PAGE_DOWN:
                    case n.ui.keyCode.UP:
                    case n.ui.keyCode.RIGHT:
                    case n.ui.keyCode.DOWN:
                    case n.ui.keyCode.LEFT:
                        if (r.preventDefault(), !t._keySliding && (t._keySliding = !0, n(this).addClass("ui-state-active"), s = t._start(r, e), s === !1)) return
                    }
                    o = t.options.step,
                    f = t.options.values && t.options.values.length ? u = t.values(e) : u = t.value();
                    switch (r.keyCode) {
                    case n.ui.keyCode.HOME:
                        u = t._valueMin();
                        break;
                    case n.ui.keyCode.END:
                        u = t._valueMax();
                        break;
                    case n.ui.keyCode.PAGE_UP:
                        u = t._trimAlignValue(f + (t._valueMax() - t._valueMin()) / i);
                        break;
                    case n.ui.keyCode.PAGE_DOWN:
                        u = t._trimAlignValue(f - (t._valueMax() - t._valueMin()) / i);
                        break;
                    case n.ui.keyCode.UP:
                    case n.ui.keyCode.RIGHT:
                        if (f === t._valueMax()) return;
                        u = t._trimAlignValue(f + o);
                        break;
                    case n.ui.keyCode.DOWN:
                    case n.ui.keyCode.LEFT:
                        if (f === t._valueMin()) return;
                        u = t._trimAlignValue(f - o)
                    }
                    t._slide(r, e, u)
                }
            }).keyup(function(i) {
                var r = n(this).data("index.ui-slider-handle");
                t._keySliding && (t._keySliding = !1, t._stop(i, r), t._change(i, r), n(this).removeClass("ui-state-active"))
            }),
            this._refreshValue(),
            this._animateOff = !1
        },
        destroy: function() {
            return this.handles.remove(),
            this.range.remove(),
            this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"),
            this._mouseDestroy(),
            this
        },
        _mouseCapture: function(t) {
            var u = this.options,
            h,
            f,
            e,
            i,
            o,
            r,
            c,
            s,
            l;
            return u.disabled ? !1: (this.elementSize = {
                width: this.element.outerWidth(),
                height: this.element.outerHeight()
            },
            this.elementOffset = this.element.offset(), h = {
                x: t.pageX,
                y: t.pageY
            },
            f = this._normValueFromMouse(h), e = this._valueMax() - this._valueMin() + 1, o = this, this.handles.each(function(t) {
                var u = Math.abs(f - o.values(t));
                e > u && (e = u, i = n(this), r = t)
            }), u.range === !0 && this.values(1) === u.min && (r += 1, i = n(this.handles[r])), c = this._start(t, r), c === !1) ? !1: (this._mouseSliding = !0, o._handleIndex = r, i.addClass("ui-state-active").focus(), s = i.offset(), l = !n(t.target).parents().andSelf().is(".ui-slider-handle"), this._clickOffset = l ? {
                left: 0,
                top: 0
            }: {
                left: t.pageX - s.left - i.width() / 2,
                top: t.pageY - s.top - i.height() / 2 - (parseInt(i.css("borderTopWidth"), 10) || 0) - (parseInt(i.css("borderBottomWidth"), 10) || 0) + (parseInt(i.css("marginTop"), 10) || 0)
            },
            this.handles.hasClass("ui-state-hover") || this._slide(t, r, f), this._animateOff = !0, !0)
        },
        _mouseStart: function() {
            return ! 0
        },
        _mouseDrag: function(n) {
            var t = {
                x: n.pageX,
                y: n.pageY
            },
            i = this._normValueFromMouse(t);
            return this._slide(n, this._handleIndex, i),
            !1
        },
        _mouseStop: function(n) {
            return this.handles.removeClass("ui-state-active"),
            this._mouseSliding = !1,
            this._stop(n, this._handleIndex),
            this._change(n, this._handleIndex),
            this._handleIndex = null,
            this._clickOffset = null,
            this._animateOff = !1,
            !1
        },
        _detectOrientation: function() {
            this.orientation = this.options.orientation === "vertical" ? "vertical": "horizontal"
        },
        _normValueFromMouse: function(n) {
            var i,
            r,
            t,
            u,
            f;
            return this.orientation === "horizontal" ? (i = this.elementSize.width, r = n.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left: 0)) : (i = this.elementSize.height, r = n.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top: 0)),
            t = r / i,
            t > 1 && (t = 1),
            t < 0 && (t = 0),
            this.orientation === "vertical" && (t = 1 - t),
            u = this._valueMax() - this._valueMin(),
            f = this._valueMin() + t * u,
            this._trimAlignValue(f)
        },
        _start: function(n, t) {
            var i = {
                handle: this.handles[t],
                value: this.value()
            };
            return this.options.values && this.options.values.length && (i.value = this.values(t), i.values = this.values()),
            this._trigger("start", n, i)
        },
        _slide: function(n, t, i) {
            var r,
            f,
            u;
            this.options.values && this.options.values.length ? (r = this.values(t ? 0: 1), this.options.values.length === 2 && this.options.range === !0 && (t === 0 && i > r || t === 1 && i < r) && (i = r), i !== this.values(t) && (f = this.values(), f[t] = i, u = this._trigger("slide", n, {
                handle: this.handles[t],
                value: i,
                values: f
            }), r = this.values(t ? 0: 1), u !== !1 && this.values(t, i, !0))) : i !== this.value() && (u = this._trigger("slide", n, {
                handle: this.handles[t],
                value: i
            }), u !== !1 && this.value(i))
        },
        _stop: function(n, t) {
            var i = {
                handle: this.handles[t],
                value: this.value()
            };
            this.options.values && this.options.values.length && (i.value = this.values(t), i.values = this.values()),
            this._trigger("stop", n, i)
        },
        _change: function(n, t) {
            if (!this._keySliding && !this._mouseSliding) {
                var i = {
                    handle: this.handles[t],
                    value: this.value()
                };
                this.options.values && this.options.values.length && (i.value = this.values(t), i.values = this.values()),
                this._trigger("change", n, i)
            }
        },
        value: function(n) {
            if (arguments.length) this.options.value = this._trimAlignValue(n),
            this._refreshValue(),
            this._change(null, 0);
            else return this._value()
        },
        values: function(t, i) {
            var u,
            f,
            r;
            if (arguments.length > 1) this.options.values[t] = this._trimAlignValue(i),
            this._refreshValue(),
            this._change(null, t);
            else {
                if (!arguments.length) return this._values();
                if (!n.isArray(arguments[0])) return this.options.values && this.options.values.length ? this._values(t) : this.value();
                for (u = this.options.values, f = arguments[0], r = 0; r < u.length; r += 1) u[r] = this._trimAlignValue(f[r]),
                this._change(null, r);
                this._refreshValue()
            }
        },
        _setOption: function(t, i) {
            var r,
            u = 0;
            n.isArray(this.options.values) && (u = this.options.values.length),
            n.Widget.prototype._setOption.apply(this, arguments);
            switch (t) {
            case "disabled":
                i ? (this.handles.filter(".ui-state-focus").blur(), this.handles.removeClass("ui-state-hover"), this.handles.propAttr("disabled", !0), this.element.addClass("ui-disabled")) : (this.handles.propAttr("disabled", !1), this.element.removeClass("ui-disabled"));
                break;
            case "orientation":
                this._detectOrientation(),
                this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-" + this.orientation),
                this._refreshValue();
                break;
            case "value":
                this._animateOff = !0,
                this._refreshValue(),
                this._change(null, 0),
                this._animateOff = !1;
                break;
            case "values":
                for (this._animateOff = !0, this._refreshValue(), r = 0; r < u; r += 1) this._change(null, r);
                this._animateOff = !1
            }
        },
        _value: function() {
            var n = this.options.value;
            return n = this._trimAlignValue(n)
        },
        _values: function(n) {
            var r,
            t,
            i;
            if (arguments.length) return r = this.options.values[n],
            r = this._trimAlignValue(r),
            r;
            for (t = this.options.values.slice(), i = 0; i < t.length; i += 1) t[i] = this._trimAlignValue(t[i]);
            return t
        },
        _trimAlignValue: function(n) {
            if (n <= this._valueMin()) return this._valueMin();
            if (n >= this._valueMax()) return this._valueMax();
            var t = this.options.step > 0 ? this.options.step: 1,
            i = (n - this._valueMin()) % t,
            r = n - i;
            return Math.abs(i) * 2 >= t && (r += i > 0 ? t: -t),
            parseFloat(r.toFixed(5))
        },
        _valueMin: function() {
            return this.options.min
        },
        _valueMax: function() {
            return this.options.max
        },
        _refreshValue: function() {
            var f = this.options.range,
            r = this.options,
            i = this,
            u = this._animateOff ? !1: r.animate,
            t,
            e = {},
            s,
            c,
            o,
            h;
            this.options.values && this.options.values.length ? this.handles.each(function(f) {
                t = (i.values(f) - i._valueMin()) / (i._valueMax() - i._valueMin()) * 100,
                e[i.orientation === "horizontal" ? "left": "bottom"] = t + "%",
                n(this).stop(1, 1)[u ? "animate": "css"](e, r.animate),
                i.options.range === !0 && (i.orientation === "horizontal" ? (f === 0 && i.range.stop(1, 1)[u ? "animate": "css"]({
                    left: t + "%"
                },
                r.animate), f === 1 && i.range[u ? "animate": "css"]({
                    width: t - s + "%"
                },
                {
                    queue: !1,
                    duration: r.animate
                })) : (f === 0 && i.range.stop(1, 1)[u ? "animate": "css"]({
                    bottom: t + "%"
                },
                r.animate), f === 1 && i.range[u ? "animate": "css"]({
                    height: t - s + "%"
                },
                {
                    queue: !1,
                    duration: r.animate
                }))),
                s = t
            }) : (c = this.value(), o = this._valueMin(), h = this._valueMax(), t = h !== o ? (c - o) / (h - o) * 100: 0, e[i.orientation === "horizontal" ? "left": "bottom"] = t + "%", this.handle.stop(1, 1)[u ? "animate": "css"](e, r.animate), f === "min" && this.orientation === "horizontal" && this.range.stop(1, 1)[u ? "animate": "css"]({
                width: t + "%"
            },
            r.animate), f === "max" && this.orientation === "horizontal" && this.range[u ? "animate": "css"]({
                width: 100 - t + "%"
            },
            {
                queue: !1,
                duration: r.animate
            }), f === "min" && this.orientation === "vertical" && this.range.stop(1, 1)[u ? "animate": "css"]({
                height: t + "%"
            },
            r.animate), f === "max" && this.orientation === "vertical" && this.range[u ? "animate": "css"]({
                height: 100 - t + "%"
            },
            {
                queue: !1,
                duration: r.animate
            }))
        }
    }),
    n.extend(n.ui.slider, {
        version: "1.8.18"
    })
} (jQuery),
function(n, i) {
    function r() {
        return++e
    }
    function u() {
        return++f
    }
    var f = 0,
    e = 0;
    n.widget("ui.tabs", {
        options: {
            add: null,
            ajaxOptions: null,
            cache: !1,
            cookie: null,
            collapsible: !1,
            disable: null,
            disabled: [],
            enable: null,
            event: "click",
            fx: null,
            idPrefix: "ui-tabs-",
            load: null,
            panelTemplate: "<div></div>",
            remove: null,
            select: null,
            show: null,
            spinner: "<em>Loading&#8230;</em>",
            tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
        },
        _create: function() {
            this._tabify(!0)
        },
        _setOption: function(n, t) {
            if (n == "selected") {
                if (this.options.collapsible && t == this.options.selected) return;
                this.select(t)
            } else this.options[n] = t,
            this._tabify()
        },
        _tabId: function(n) {
            return n.title && n.title.replace(/\s/g, "_").replace(/[^\w\u00c0-\uFFFF-]/g, "") || this.options.idPrefix + u()
        },
        _sanitizeSelector: function(n) {
            return n.replace(/:/g, "\\:")
        },
        _cookie: function() {
            var t = this.cookie || (this.cookie = this.options.cookie.name || "ui-tabs-" + r());
            return n.cookie.apply(null, [t].concat(n.makeArray(arguments)))
        },
        _ui: function(n, t) {
            return {
                tab: n,
                panel: t,
                index: this.anchors.index(n)
            }
        },
        _cleanup: function() {
            this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function() {
                var t = n(this);
                t.html(t.data("label.tabs")).removeData("label.tabs")
            })
        },
        _tabify: function(t) {
            function v(t, i) {
                t.css("display", ""),
                !n.support.opacity && i.opacity && t[0].style.removeAttribute("filter")
            }
            var u = this,
            r = this.options,
            y = /^#.+/,
            o,
            s,
            h,
            c,
            f,
            e,
            l,
            a;
            for (this.list = this.element.find("ol,ul").eq(0), this.lis = n(" > li:has(a[href])", this.list), this.anchors = this.lis.map(function() {
                return n("a", this)[0]
            }), this.panels = n([]), this.anchors.each(function(t, i) {
                var f = n(i).attr("href"),
                s = f.split("#")[0],
                h,
                o,
                e;
                s && (s === location.toString().split("#")[0] || (h = n("base")[0]) && s === h.href) && (f = i.hash, i.href = f),
                y.test(f) ? u.panels = u.panels.add(u.element.find(u._sanitizeSelector(f))) : f && f !== "#" ? (n.data(i, "href.tabs", f), n.data(i, "load.tabs", f.replace(/#.*$/, "")), o = u._tabId(i), i.href = "#" + o, e = u.element.find("#" + o), e.length || (e = n(r.panelTemplate).attr("id", o).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(u.panels[t - 1] || u.list), e.data("destroy.tabs", !0)), u.panels = u.panels.add(e)) : r.disabled.push(t)
            }), t ? (this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"), this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"), this.lis.addClass("ui-state-default ui-corner-top"), this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom"), r.selected === i ? (location.hash && this.anchors.each(function(n, t) {
                if (t.hash == location.hash) return r.selected = n,
                !1
            }), typeof r.selected != "number" && r.cookie && (r.selected = parseInt(u._cookie(), 10)), typeof r.selected != "number" && this.lis.filter(".ui-tabs-selected").length && (r.selected = this.lis.index(this.lis.filter(".ui-tabs-selected"))), r.selected = r.selected || (this.lis.length ? 0: -1)) : r.selected === null && (r.selected = -1), r.selected = r.selected >= 0 && this.anchors[r.selected] || r.selected < 0 ? r.selected: 0, r.disabled = n.unique(r.disabled.concat(n.map(this.lis.filter(".ui-state-disabled"), 
            function(n) {
                return u.lis.index(n)
            }))).sort(), n.inArray(r.selected, r.disabled) != -1 && r.disabled.splice(n.inArray(r.selected, r.disabled), 1), this.panels.addClass("ui-tabs-hide"), this.lis.removeClass("ui-tabs-selected ui-state-active"), r.selected >= 0 && this.anchors.length && (u.element.find(u._sanitizeSelector(u.anchors[r.selected].hash)).removeClass("ui-tabs-hide"), this.lis.eq(r.selected).addClass("ui-tabs-selected ui-state-active"), u.element.queue("tabs", 
            function() {
                u._trigger("show", null, u._ui(u.anchors[r.selected], u.element.find(u._sanitizeSelector(u.anchors[r.selected].hash))[0]))
            }), this.load(r.selected)), n(window).bind("unload", 
            function() {
                u.lis.add(u.anchors).unbind(".tabs"),
                u.lis = u.anchors = u.panels = null
            })) : r.selected = this.lis.index(this.lis.filter(".ui-tabs-selected")), this.element[r.collapsible ? "addClass": "removeClass"]("ui-tabs-collapsible"), r.cookie && this._cookie(r.selected, r.cookie), o = 0; s = this.lis[o]; o++) n(s)[n.inArray(o, r.disabled) != -1 && !n(s).hasClass("ui-tabs-selected") ? "addClass": "removeClass"]("ui-state-disabled");
            r.cache === !1 && this.anchors.removeData("cache.tabs"),
            this.lis.add(this.anchors).unbind(".tabs"),
            r.event !== "mouseover" && (h = function(n, t) {
                t.is(":not(.ui-state-disabled)") && t.addClass("ui-state-" + n)
            },
            c = function(n, t) {
                t.removeClass("ui-state-" + n)
            },
            this.lis.bind("mouseover.tabs", 
            function() {
                h("hover", n(this))
            }), this.lis.bind("mouseout.tabs", 
            function() {
                c("hover", n(this))
            }), this.anchors.bind("focus.tabs", 
            function() {
                h("focus", n(this).closest("li"))
            }), this.anchors.bind("blur.tabs", 
            function() {
                c("focus", n(this).closest("li"))
            })),
            r.fx && (n.isArray(r.fx) ? (f = r.fx[0], e = r.fx[1]) : f = e = r.fx),
            l = e ? 
            function(t, i) {
                n(t).closest("li").addClass("ui-tabs-selected ui-state-active"),
                i.hide().removeClass("ui-tabs-hide").animate(e, e.duration || "normal", 
                function() {
                    v(i, e),
                    u._trigger("show", null, u._ui(t, i[0]))
                })
            }: function(t, i) {
                n(t).closest("li").addClass("ui-tabs-selected ui-state-active"),
                i.removeClass("ui-tabs-hide"),
                u._trigger("show", null, u._ui(t, i[0]))
            },
            a = f ? 
            function(n, t) {
                t.animate(f, f.duration || "normal", 
                function() {
                    u.lis.removeClass("ui-tabs-selected ui-state-active"),
                    t.addClass("ui-tabs-hide"),
                    v(t, f),
                    u.element.dequeue("tabs")
                })
            }: function(n, t) {
                u.lis.removeClass("ui-tabs-selected ui-state-active"),
                t.addClass("ui-tabs-hide"),
                u.element.dequeue("tabs")
            },
            this.anchors.bind(r.event + ".tabs", 
            function() {
                var t = this,
                i = n(t).closest("li"),
                f = u.panels.filter(":not(.ui-tabs-hide)"),
                e = u.element.find(u._sanitizeSelector(t.hash));
                if (i.hasClass("ui-tabs-selected") && !r.collapsible || i.hasClass("ui-state-disabled") || i.hasClass("ui-state-processing") || u.panels.filter(":animated").length || u._trigger("select", null, u._ui(this, e[0])) === !1) return this.blur(),
                !1;
                if (r.selected = u.anchors.index(this), u.abort(), r.collapsible) {
                    if (i.hasClass("ui-tabs-selected")) return r.selected = -1,
                    r.cookie && u._cookie(r.selected, r.cookie),
                    u.element.queue("tabs", 
                    function() {
                        a(t, f)
                    }).dequeue("tabs"),
                    this.blur(),
                    !1;
                    if (!f.length) return r.cookie && u._cookie(r.selected, r.cookie),
                    u.element.queue("tabs", 
                    function() {
                        l(t, e)
                    }),
                    u.load(u.anchors.index(this)),
                    this.blur(),
                    !1
                }
                if (r.cookie && u._cookie(r.selected, r.cookie), e.length) f.length && u.element.queue("tabs", 
                function() {
                    a(t, f)
                }),
                u.element.queue("tabs", 
                function() {
                    l(t, e)
                }),
                u.load(u.anchors.index(this));
                else throw "jQuery UI Tabs: Mismatching fragment identifier.";
                n.browser.msie && this.blur()
            }),
            this.anchors.bind("click.tabs", 
            function() {
                return ! 1
            })
        },
        _getIndex: function(n) {
            return typeof n == "string" && (n = this.anchors.index(this.anchors.filter("[href$=" + n + "]"))),
            n
        },
        destroy: function() {
            var t = this.options;
            return this.abort(),
            this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs"),
            this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),
            this.anchors.each(function() {
                var t = n.data(this, "href.tabs"),
                i;
                t && (this.href = t),
                i = n(this).unbind(".tabs"),
                n.each(["href", "load", "cache"], 
                function(n, t) {
                    i.removeData(t + ".tabs")
                })
            }),
            this.lis.unbind(".tabs").add(this.panels).each(function() {
                n.data(this, "destroy.tabs") ? n(this).remove() : n(this).removeClass(["ui-state-default", "ui-corner-top", "ui-tabs-selected", "ui-state-active", "ui-state-hover", "ui-state-focus", "ui-state-disabled", "ui-tabs-panel", "ui-widget-content", "ui-corner-bottom", "ui-tabs-hide"].join(" "))
            }),
            t.cookie && this._cookie(null, t.cookie),
            this
        },
        add: function(t, r, u) {
            var f;
            u === i && (u = this.anchors.length);
            var e = this,
            o = this.options,
            s = n(o.tabTemplate.replace(/#\{href\}/g, t).replace(/#\{label\}/g, r)),
            h = t.indexOf("#") ? this._tabId(n("a", s)[0]) : t.replace("#", "");
            return s.addClass("ui-state-default ui-corner-top").data("destroy.tabs", !0),
            f = e.element.find("#" + h),
            f.length || (f = n(o.panelTemplate).attr("id", h).data("destroy.tabs", !0)),
            f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"),
            u >= this.lis.length ? (s.appendTo(this.list), f.appendTo(this.list[0].parentNode)) : (s.insertBefore(this.lis[u]), f.insertBefore(this.panels[u])),
            o.disabled = n.map(o.disabled, 
            function(n) {
                return n >= u ? ++n: n
            }),
            this._tabify(),
            this.anchors.length == 1 && (o.selected = 0, s.addClass("ui-tabs-selected ui-state-active"), f.removeClass("ui-tabs-hide"), this.element.queue("tabs", 
            function() {
                e._trigger("show", null, e._ui(e.anchors[0], e.panels[0]))
            }), this.load(0)),
            this._trigger("add", null, this._ui(this.anchors[u], this.panels[u])),
            this
        },
        remove: function(t) {
            t = this._getIndex(t);
            var i = this.options,
            r = this.lis.eq(t).remove(),
            u = this.panels.eq(t).remove();
            return r.hasClass("ui-tabs-selected") && this.anchors.length > 1 && this.select(t + (t + 1 < this.anchors.length ? 1: -1)),
            i.disabled = n.map(n.grep(i.disabled, 
            function(n) {
                return n != t
            }), 
            function(n) {
                return n >= t ? --n: n
            }),
            this._tabify(),
            this._trigger("remove", null, this._ui(r.find("a")[0], u[0])),
            this
        },
        enable: function(t) {
            t = this._getIndex(t);
            var i = this.options;
            if (n.inArray(t, i.disabled) != -1) return this.lis.eq(t).removeClass("ui-state-disabled"),
            i.disabled = n.grep(i.disabled, 
            function(n) {
                return n != t
            }),
            this._trigger("enable", null, this._ui(this.anchors[t], this.panels[t])),
            this
        },
        disable: function(n) {
            n = this._getIndex(n);
            var i = this,
            t = this.options;
            return n != t.selected && (this.lis.eq(n).addClass("ui-state-disabled"), t.disabled.push(n), t.disabled.sort(), this._trigger("disable", null, this._ui(this.anchors[n], this.panels[n]))),
            this
        },
        select: function(n) {
            if (n = this._getIndex(n), n == -1) if (this.options.collapsible && this.options.selected != -1) n = this.options.selected;
            else return this;
            return this.anchors.eq(n).trigger(this.options.event + ".tabs"),
            this
        },
        load: function(t) {
            var f;
            t = this._getIndex(t);
            var i = this,
            r = this.options,
            u = this.anchors.eq(t)[0],
            e = n.data(u, "load.tabs");
            if (this.abort(), !e || this.element.queue("tabs").length !== 0 && n.data(u, "cache.tabs")) this.element.dequeue("tabs");
            else return this.lis.eq(t).addClass("ui-state-processing"),
            r.spinner && (f = n("span", u), f.data("label.tabs", f.html()).html(r.spinner)),
            this.xhr = n.ajax(n.extend({},
            r.ajaxOptions, {
                url: e,
                success: function(f, e) {
                    i.element.find(i._sanitizeSelector(u.hash)).html(f),
                    i._cleanup(),
                    r.cache && n.data(u, "cache.tabs", !0),
                    i._trigger("load", null, i._ui(i.anchors[t], i.panels[t]));
                    try {
                        r.ajaxOptions.success(f, e)
                    } catch(o) {}
                },
                error: function(n, f) {
                    i._cleanup(),
                    i._trigger("load", null, i._ui(i.anchors[t], i.panels[t]));
                    try {
                        r.ajaxOptions.error(n, f, t, u)
                    } catch(e) {}
                }
            })),
            i.element.dequeue("tabs"),
            this
        },
        abort: function() {
            return this.element.queue([]),
            this.panels.stop(!1, !0),
            this.element.queue("tabs", this.element.queue("tabs").splice( - 2, 2)),
            this.xhr && (this.xhr.abort(), delete this.xhr),
            this._cleanup(),
            this
        },
        url: function(n, t) {
            return this.anchors.eq(n).removeData("cache.tabs").data("load.tabs", t),
            this
        },
        length: function() {
            return this.anchors.length
        }
    }),
    n.extend(n.ui.tabs, {
        version: "1.8.18"
    }),
    n.extend(n.ui.tabs.prototype, {
        rotation: null,
        rotate: function(n, i) {
            var r = this,
            u = this.options,
            f = r._rotate || (r._rotate = function(t) {
                clearTimeout(r.rotation),
                r.rotation = setTimeout(function() {
                    var n = u.selected;
                    r.select(++n < r.anchors.length ? n: 0)
                },
                n),
                t && t.stopPropagation()
            }),
            e = r._unrotate || (r._unrotate = i ? 
            function() {
                t = u.selected,
                f()
            }: function(n) {
                n.clientX && r.rotate(null)
            });
            return n ? (this.element.bind("tabsshow", f), this.anchors.bind(u.event + ".tabs", e), f()) : (clearTimeout(r.rotation), this.element.unbind("tabsshow", f), this.anchors.unbind(u.event + ".tabs", e), delete this._rotate, delete this._unrotate),
            this
        }
    })
} (jQuery),
function(n, t, i) {
    function l(n) {
        var t = {},
        r = /^jQuery\d+$/;
        return i.each(n.attributes, 
        function(n, i) {
            i.specified && !r.test(i.name) && (t[i.name] = i.value)
        }),
        t
    }
    function f(n, r) {
        var f = this,
        u = i(f);
        if (f.value == u.attr("placeholder") && u.hasClass("placeholder")) if (u.data("placeholder-password")) {
            if (u = u.hide().next().show().attr("id", u.removeAttr("id").data("placeholder-id")), n === !0) return u[0].value = r;
            u.focus()
        } else f.value = "",
        u.removeClass("placeholder"),
        f == t.activeElement && f.select()
    }
    function s() {
        var t,
        r = this,
        n = i(r),
        e = n,
        u = this.id;
        if (r.value == "") {
            if (r.type == "password") {
                if (!n.data("placeholder-textinput")) {
                    try {
                        t = n.clone().attr({
                            type: "text"
                        })
                    } catch(o) {
                        t = i("<input>").attr(i.extend(l(this), {
                            type: "text"
                        }))
                    }
                    t.removeAttr("name").data({
                        "placeholder-password": !0,
                        "placeholder-id": u
                    }).bind("focus.placeholder", f),
                    n.data({
                        "placeholder-textinput": t,
                        "placeholder-id": u
                    }).before(t)
                }
                n = n.removeAttr("id").hide().prev().attr("id", u).show()
            }
            n.addClass("placeholder"),
            n[0].value = n.attr("placeholder")
        } else n.removeClass("placeholder")
    }
    var u = "placeholder" in t.createElement("input"),
    e = "placeholder" in t.createElement("textarea"),
    h = i.fn,
    c = i.valHooks,
    o,
    r;
    u && e ? (r = h.placeholder = function() {
        return this
    },
    r.input = r.textarea = !0) : (r = h.placeholder = function() {
        var n = this;
        return n.filter((u ? "textarea": ":input") + "[placeholder]").not(".placeholder").bind({
            "focus.placeholder": f,
            "blur.placeholder": s
        }).data("placeholder-enabled", !0).trigger("blur.placeholder"),
        n
    },
    r.input = u, r.textarea = e, o = {
        get: function(n) {
            var t = i(n);
            return t.data("placeholder-enabled") && t.hasClass("placeholder") ? "": n.value
        },
        set: function(n, r) {
            var u = i(n);
            return u.data("placeholder-enabled") ? (r == "" ? (n.value = r, n != t.activeElement && s.call(n)) : u.hasClass("placeholder") ? f.call(n, !0, r) || (n.value = r) : n.value = r, u) : n.value = r
        }
    },
    u || (c.input = o), e || (c.textarea = o), i(function() {
        i(t).delegate("form", "submit.placeholder", 
        function() {
            var n = i(".placeholder", this).each(f);
            setTimeout(function() {
                n.each(s)
            },
            10)
        })
    }), i(n).bind("beforeunload.placeholder", 
    function() {
        i(".placeholder").each(function() {
            this.value = ""
        })
    }))
} (this, document, jQuery),
function(n) {
    function r() {
        var t = u(this);
        return isNaN(t.datetime) || n(this).text(i(t.datetime)),
        this
    }
    function u(i) {
        if (i = n(i), !i.data("timeago")) {
            i.data("timeago", {
                datetime: t.datetime(i)
            });
            var r = n.trim(i.text());
            r.length > 0 && !(t.isTime(i) && i.attr("title")) && i.attr("title", r)
        }
        return i.data("timeago")
    }
    function i(n) {
        return t.inWords(f(n))
    }
    function f(n) {
        return + new Date - n.getTime()
    }
    n.timeago = function(t) {
        return t instanceof Date ? i(t) : typeof t == "string" ? i(n.timeago.parse(t)) : typeof t == "number" ? i(new Date(t)) : i(n.timeago.datetime(t))
    };
    var t = n.timeago;
    n.extend(n.timeago, {
        settings: {
            refreshMillis: 6e4,
            allowFuture: !1,
            strings: {
                prefixAgo: null,
                prefixFromNow: null,
                suffixAgo: "ago",
                suffixFromNow: "from now",
                seconds: "less than a minute",
                minute: "about a minute",
                minutes: "%d minutes",
                hour: "about an hour",
                hours: "about %d hours",
                day: "a day",
                days: "%d days",
                month: "about a month",
                months: "%d months",
                year: "about a year",
                years: "%d years",
                wordSeparator: " ",
                numbers: []
            }
        },
        inWords: function(t) {
            function r(r, u) {
                var f = n.isFunction(r) ? r(u, t) : r,
                e = i.numbers && i.numbers[u] || u;
                return f.replace(/%d/i, e)
            }
            var i = this.settings.strings,
            s = i.prefixAgo,
            h = i.suffixAgo,
            l,
            a;
            this.settings.allowFuture && t < 0 && (s = i.prefixFromNow, h = i.suffixFromNow);
            var f = Math.abs(t) / 1e3,
            e = f / 60,
            o = e / 60,
            u = o / 24,
            c = u / 365;
            return l = f < 45 && r(i.seconds, Math.round(f)) || f < 90 && r(i.minute, 1) || e < 45 && r(i.minutes, Math.round(e)) || e < 90 && r(i.hour, 1) || o < 24 && r(i.hours, Math.round(o)) || o < 42 && r(i.day, 1) || u < 30 && r(i.days, Math.round(u)) || u < 45 && r(i.month, 1) || u < 365 && r(i.months, Math.round(u / 30)) || c < 1.5 && r(i.year, 1) || r(i.years, Math.round(c)),
            a = i.wordSeparator === undefined ? " ": i.wordSeparator,
            n.trim([s, l, h].join(a))
        },
        parse: function(t) {
            var i = n.trim(t);
            return i = i.replace(/\.\d+/, ""),
            i = i.replace(/-/, "/").replace(/-/, "/"),
            i = i.replace(/T/, " ").replace(/Z/, " UTC"),
            i = i.replace(/([\+\-]\d\d)\:?(\d\d)/, " $1$2"),
            new Date(i)
        },
        datetime: function(i) {
            var r = t.isTime(i) ? n(i).attr("datetime") : n(i).attr("title");
            return t.parse(r)
        },
        isTime: function(t) {
            return n(t).get(0).tagName.toLowerCase() === "time"
        }
    }),
    n.fn.timeago = function() {
        var n = this,
        i;
        return n.each(r),
        i = t.settings,
        i.refreshMillis > 0 && setInterval(function() {
            n.each(r)
        },
        i.refreshMillis),
        n
    },
    document.createElement("abbr"),
    document.createElement("time")
} (jQuery),
function(n) {
    "use strict";
    var o = {},
    ct,
    t,
    r,
    f,
    s,
    u,
    ht,
    st,
    ot,
    a,
    at,
    et,
    ft,
    ut,
    e,
    tt,
    rt,
    h,
    l,
    it,
    lt,
    nt,
    v,
    p,
    y,
    g,
    d,
    k,
    c,
    b,
    w,
    i,
    vt = 0;
    ct = function() {
        return {
            common: {
                type: "line",
                lineColor: "#00f",
                fillColor: "#cdf",
                defaultPixelsPerValue: 3,
                width: "auto",
                height: "auto",
                composite: !1,
                tagValuesAttribute: "values",
                tagOptionsPrefix: "spark",
                enableTagOptions: !1,
                enableHighlight: !0,
                highlightLighten: 1.4,
                tooltipSkipNull: !0,
                tooltipPrefix: "",
                tooltipSuffix: "",
                disableHiddenCheck: !1,
                numberFormatter: !1,
                numberDigitGroupCount: 3,
                numberDigitGroupSep: ",",
                numberDecimalMark: ".",
                disableTooltips: !1,
                disableInteraction: !1
            },
            line: {
                spotColor: "#f80",
                highlightSpotColor: "#5f5",
                highlightLineColor: "#f22",
                spotRadius: 1.5,
                minSpotColor: "#f80",
                maxSpotColor: "#f80",
                lineWidth: 1,
                normalRangeMin: undefined,
                normalRangeMax: undefined,
                normalRangeColor: "#ccc",
                drawNormalOnTop: !1,
                chartRangeMin: undefined,
                chartRangeMax: undefined,
                chartRangeMinX: undefined,
                chartRangeMaxX: undefined,
                tooltipFormat: new r('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{y}}{{suffix}}')
            },
            bar: {
                barColor: "#3366cc",
                negBarColor: "#f44",
                stackedBarColor: ["#3366cc", "#dc3912", "#ff9900", "#109618", "#66aa00", "#dd4477", "#0099c6", "#990099"],
                zeroColor: undefined,
                nullColor: undefined,
                zeroAxis: !0,
                barWidth: 4,
                barSpacing: 1,
                chartRangeMax: undefined,
                chartRangeMin: undefined,
                chartRangeClip: !1,
                colorMap: undefined,
                tooltipFormat: new r('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{value}}{{suffix}}')
            },
            tristate: {
                barWidth: 4,
                barSpacing: 1,
                posBarColor: "#6f6",
                negBarColor: "#f44",
                zeroBarColor: "#999",
                colorMap: {},
                tooltipFormat: new r('<span style="color: {{color}}">&#9679;</span> {{value:map}}'),
                tooltipValueLookups: {
                    map: {
                        "-1": "Loss",
                        0: "Draw",
                        1: "Win"
                    }
                }
            },
            discrete: {
                lineHeight: "auto",
                thresholdColor: undefined,
                thresholdValue: 0,
                chartRangeMax: undefined,
                chartRangeMin: undefined,
                chartRangeClip: !1,
                tooltipFormat: new r("{{prefix}}{{value}}{{suffix}}")
            },
            bullet: {
                targetColor: "#f33",
                targetWidth: 3,
                performanceColor: "#33f",
                rangeColors: ["#d3dafe", "#a8b6ff", "#7f94ff"],
                base: undefined,
                tooltipFormat: new r("{{fieldkey:fields}} - {{value}}"),
                tooltipValueLookups: {
                    fields: {
                        r: "Range",
                        p: "Performance",
                        t: "Target"
                    }
                }
            },
            pie: {
                offset: 0,
                sliceColors: ["#3366cc", "#dc3912", "#ff9900", "#109618", "#66aa00", "#dd4477", "#0099c6", "#990099"],
                borderWidth: 0,
                borderColor: "#000",
                tooltipFormat: new r('<span style="color: {{color}}">&#9679;</span> {{value}} ({{percent.1}}%)')
            },
            box: {
                raw: !1,
                boxLineColor: "#000",
                boxFillColor: "#cdf",
                whiskerColor: "#000",
                outlierLineColor: "#333",
                outlierFillColor: "#fff",
                medianColor: "#f00",
                showOutliers: !0,
                outlierIQR: 1.5,
                spotRadius: 1.5,
                target: undefined,
                targetColor: "#4a2",
                chartRangeMax: undefined,
                chartRangeMin: undefined,
                tooltipFormat: new r("{{field:fields}}: {{value}}"),
                tooltipFormatFieldlistKey: "field",
                tooltipValueLookups: {
                    fields: {
                        lq: "Lower Quartile",
                        med: "Median",
                        uq: "Upper Quartile",
                        lo: "Left Outlier",
                        ro: "Right Outlier",
                        lw: "Left Whisker",
                        rw: "Right Whisker"
                    }
                }
            }
        }
    },
    g = '.jqstooltip { position: absolute;left: 0px;top: 0px;visibility: hidden;background: rgb(0, 0, 0) transparent;background-color: rgba(0,0,0,0.6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";color: white;font: 10px arial, san serif;text-align: left;white-space: nowrap;padding: 5px;border: 1px solid white;}.jqsfield { color: white;font: 10px arial, san serif;text-align: left;}',
    d = function() {
        et(g)
    },
    n(d),
    t = function() {
        var t,
        i;
        return t = function() {
            this.init.apply(this, arguments)
        },
        arguments.length > 1 ? (arguments[0] ? (t.prototype = n.extend(new arguments[0], arguments[arguments.length - 1]), t._super = arguments[0].prototype) : t.prototype = arguments[arguments.length - 1], arguments.length > 2 && (i = Array.prototype.slice.call(arguments, 1, -1), i.unshift(t.prototype), n.extend.apply(n, i))) : t.prototype = arguments[0],
        t.prototype.cls = t,
        t
    },
    n.SPFormatClass = r = t({
        fre: /\{\{([\w.]+?)(:(.+?))?\}\}/g,
        precre: /(\w+)\.(\d+)/,
        init: function(n, t) {
            this.format = n,
            this.fclass = t
        },
        render: function(n, t, i) {
            var s = this,
            h = n,
            f,
            e,
            u,
            r,
            o;
            return this.format.replace(this.fre, 
            function() {
                var n;
                return e = arguments[1],
                u = arguments[3],
                f = s.precre.exec(e),
                f ? (o = f[2], e = f[1]) : o = !1,
                r = h[e],
                r === undefined ? "": u && t && t[u] ? (n = t[u], n.get ? t[u].get(r) || r: t[u][r] || r) : (ot(r) && (r = i.get("numberFormatter") ? i.get("numberFormatter")(r) : ut(r, o, i.get("numberDigitGroupCount"), i.get("numberDigitGroupSep"), i.get("numberDecimalMark"))), r)
            })
        }
    }),
    n.spformat = function(n, t) {
        return new r(n, t)
    },
    f = function(n, t, i) {
        return n < t ? t: n > i ? i: n
    },
    s = function(n, t) {
        var i;
        return t === 2 ? (i = Math.floor(n.length / 2), n.length % 2 ? n[i] : (n[i] + n[i + 1]) / 2) : (i = Math.floor(n.length / 4), n.length % 2 ? (n[i * t] + n[i * t + 1]) / 2: n[i * t])
    },
    u = function(n) {
        var t;
        switch (n) {
        case "undefined":
            n = undefined;
            break;
        case "null":
            n = null;
            break;
        case "true":
            n = !0;
            break;
        case "false":
            n = !1;
            break;
        default:
            t = parseFloat(n),
            n == t && (n = t)
        }
        return n
    },
    ht = function(n) {
        for (var i = [], t = n.length; t--;) i[t] = u(n[t]);
        return i
    },
    st = function(n, t) {
        for (var u = [], i = 0, r = n.length; i < r; i++) n[i] !== t && u.push(n[i]);
        return u
    },
    ot = function(n) {
        return ! isNaN(parseFloat(n)) && isFinite(n)
    },
    ut = function(t, i, r, u, f) {
        var e,
        o;
        for (t = (i === !1 ? parseFloat(t).toString() : t.toFixed(i)).split(""), e = (e = n.inArray(".", t)) < 0 ? t.length: e, e < t.length && (t[e] = f), o = e - r; o > 0; o -= r) t.splice(o, 0, u);
        return t.join("")
    },
    a = function(n, t, i) {
        for (var r = t.length; r--;) if (t[r] !== n || !i && n === null) return ! 1;
        return ! 0
    },
    at = function(n) {
        for (var i = 0, t = n.length; t--;) i += typeof n[t] == "number" ? n[t] : 0;
        return i
    },
    ft = function(t) {
        return n.isArray(t) ? t: [t]
    },
    et = function(n) {
        var t;
        document.createStyleSheet ? document.createStyleSheet().cssText = n: (t = document.createElement("style"), t.type = "text/css", document.getElementsByTagName("head")[0].appendChild(t), t[typeof document.body.style.WebkitAppearance == "string" ? "innerText": "innerHTML"] = n)
    },
    n.fn.simpledraw = function(t, i, r, u) {
        var f,
        e;
        if (r && (f = this.data("_jqs_vcanvas"))) return f;
        if (t === undefined && (t = n(this).innerWidth()), i === undefined && (i = n(this).innerHeight()), n.browser.hasCanvas) f = new b(t, i, this, u);
        else {
            if (!n.browser.msie) return ! 1;
            f = new w(t, i, this)
        }
        return e = n(this).data("_jqs_mhandler"),
        e && e.registerCanvas(f),
        f
    },
    n.fn.cleardraw = function() {
        var n = this.data("_jqs_vcanvas");
        n && n.reset()

    },
    n.RangeMapClass = e = t({
        init: function(n) {
            var i,
            t,
            r = [];
            for (i in n) n.hasOwnProperty(i) && typeof i == "string" && i.indexOf(":") > -1 && (t = i.split(":"), t[0] = t[0].length === 0 ? -Infinity: parseFloat(t[0]), t[1] = t[1].length === 0 ? Infinity: parseFloat(t[1]), t[2] = n[i], r.push(t));
            this.map = n,
            this.rangelist = r || !1
        },
        get: function(n) {
            var i = this.rangelist,
            r,
            t,
            u;
            if ((u = this.map[n]) !== undefined) return u;
            if (i) for (r = i.length; r--;) if (t = i[r], t[0] <= n && t[1] >= n) return t[2];
            return undefined
        }
    }),
    n.range_map = function(n) {
        return new e(n)
    },
    tt = t({
        init: function(t, i) {
            var r = n(t);
            this.$el = r,
            this.options = i,
            this.currentPageX = 0,
            this.currentPageY = 0,
            this.el = t,
            this.splist = [],
            this.tooltip = null,
            this.over = !1,
            this.displayTooltips = !i.get("disableTooltips"),
            this.highlightEnabled = !i.get("disableHighlight")
        },
        registerSparkline: function(n) {
            this.splist.push(n),
            this.over && this.updateDisplay()
        },
        registerCanvas: function(t) {
            var i = n(t.canvas);
            this.canvas = t,
            this.$canvas = i,
            i.mouseenter(n.proxy(this.mouseenter, this)),
            i.mouseleave(n.proxy(this.mouseleave, this)),
            i.click(n.proxy(this.mouseclick, this))
        },
        reset: function(n) {
            this.splist = [],
            this.tooltip && n && (this.tooltip.remove(), this.tooltip = undefined)
        },
        mouseclick: function(t) {
            var i = n.Event("sparklineClick");
            i.originalEvent = t,
            i.sparklines = this.splist,
            this.$el.trigger(i)
        },
        mouseenter: function(t) {
            n(document.body).unbind("mousemove.jqs"),
            n(document.body).bind("mousemove.jqs", n.proxy(this.mousemove, this)),
            this.over = !0,
            this.currentPageX = t.pageX,
            this.currentPageY = t.pageY,
            this.currentEl = t.target,
            !this.tooltip && this.displayTooltips && (this.tooltip = new rt(this.options), this.tooltip.updatePosition(t.pageX, t.pageY)),
            this.updateDisplay()
        },
        mouseleave: function() {
            n(document.body).unbind("mousemove.jqs");
            var i = this.splist,
            f = i.length,
            r = !1,
            u,
            t;
            for (this.over = !1, this.currentEl = null, this.tooltip && (this.tooltip.remove(), this.tooltip = null), t = 0; t < f; t++) u = i[t],
            u.clearRegionHighlight() && (r = !0);
            r && this.canvas.render()
        },
        mousemove: function(n) {
            this.currentPageX = n.pageX,
            this.currentPageY = n.pageY,
            this.currentEl = n.target,
            this.tooltip && this.tooltip.updatePosition(n.pageX, n.pageY),
            this.updateDisplay()
        },
        updateDisplay: function() {
            var r = this.splist,
            o = r.length,
            s = !1,
            h = this.$canvas.offset(),
            c = this.currentPageX - h.left,
            l = this.currentPageY - h.top,
            u,
            i,
            t,
            f,
            e;
            if (this.over) {
                for (t = 0; t < o; t++) i = r[t],
                f = i.setRegionHighlight(this.currentEl, c, l),
                f && (s = !0);
                if (s) {
                    if (e = n.Event("sparklineRegionChange"), e.sparklines = this.splist, this.$el.trigger(e), this.tooltip) {
                        for (u = "", t = 0; t < o; t++) i = r[t],
                        u += i.getCurrentRegionTooltip();
                        this.tooltip.setContent(u)
                    }
                    this.disableHighlight || this.canvas.render()
                }
                f === null && this.mouseleave()
            }
        }
    }),
    rt = t({
        sizeStyle: "position: static !important;display: block !important;visibility: hidden !important;float: left !important;",
        init: function(t) {
            var r = t.get("tooltipClassname", "jqstooltip"),
            u = this.sizeStyle,
            i;
            this.container = t.get("tooltipContainer") || document.body,
            this.tooltipOffsetX = t.get("tooltipOffsetX", 10),
            this.tooltipOffsetY = t.get("tooltipOffsetY", 12),
            n("#jqssizetip").remove(),
            n("#jqstooltip").remove(),
            this.sizetip = n("<div/>", {
                id: "jqssizetip",
                style: u,
                "class": r
            }),
            this.tooltip = n("<div/>", {
                id: "jqstooltip",
                "class": r
            }).appendTo(this.container),
            i = this.tooltip.offset(),
            this.offsetLeft = i.left,
            this.offsetTop = i.top,
            this.hidden = !0,
            n(window).unbind("resize.jqs scroll.jqs"),
            n(window).bind("resize.jqs scroll.jqs", n.proxy(this.updateWindowDims, this)),
            this.updateWindowDims()
        },
        updateWindowDims: function() {
            this.scrollTop = n(window).scrollTop(),
            this.scrollLeft = n(window).scrollLeft(),
            this.scrollRight = this.scrollLeft + n(window).width(),
            this.updatePosition()
        },
        getSize: function(n) {
            this.sizetip.html(n).appendTo(this.container),
            this.width = this.sizetip.width() + 1,
            this.height = this.sizetip.height(),
            this.sizetip.remove()
        },
        setContent: function(n) {
            if (!n) {
                this.tooltip.css("visibility", "hidden"),
                this.hidden = !0;
                return
            }
            this.getSize(n),
            this.tooltip.html(n).css({
                width: this.width,
                height: this.height,
                visibility: "visible"
            }),
            this.hidden && (this.hidden = !1, this.updatePosition())
        },
        updatePosition: function(n, t) {
            if (n === undefined) {
                if (this.mousex === undefined) return;
                n = this.mousex - this.offsetLeft,
                t = this.mousey - this.offsetTop
            } else this.mousex = n -= this.offsetLeft,
            this.mousey = t -= this.offsetTop;
            this.height && this.width && !this.hidden && (t -= this.height + this.tooltipOffsetY, n += this.tooltipOffsetX, t < this.scrollTop && (t = this.scrollTop), n < this.scrollLeft ? n = this.scrollLeft: n + this.width > this.scrollRight && (n = this.scrollRight - this.width), this.tooltip.css({
                left: n,
                top: t
            }))
        },
        remove: function() {
            this.tooltip.remove(),
            this.sizetip.remove(),
            this.sizetip = this.tooltip = undefined,
            n(window).unbind("resize.jqs scroll.jqs")
        }
    }),
    i = [],
    n.fn.sparkline = function(t, r) {
        return this.each(function() {
            var u = new n.fn.sparkline.options(this, r),
            o = n(this),
            e,
            f;
            if (e = function() {
                var e,
                c,
                s,
                r,
                i,
                h,
                f;
                if (t === "html" || t === undefined ? (f = this.getAttribute(u.get("tagValuesAttribute")), (f === undefined || f === null) && (f = o.html()), e = f.replace(/(^\s*<!--)|(-->\s*$)|\s+/g, "").split(",")) : e = t, c = u.get("width") === "auto" ? e.length * u.get("defaultPixelsPerValue") : u.get("width"), u.get("height") === "auto" ? u.get("composite") && n.data(this, "_jqs_vcanvas") || (r = document.createElement("span"), r.innerHTML = "a", o.html(r), s = n(r).innerHeight() || n(r).height(), n(r).remove(), r = null) : s = u.get("height"), u.get("disableInteraction") ? i = !1: (i = n.data(this, "_jqs_mhandler"), i ? u.get("composite") || i.reset() : (i = new tt(this, u), n.data(this, "_jqs_mhandler", i))), u.get("composite") && !n.data(this, "_jqs_vcanvas")) {
                    n.data(this, "_jqs_errnotify") || (alert("Attempted to attach a composite sparkline to an element with no existing sparkline"), n.data(this, "_jqs_errnotify", !0));
                    return
                }
                h = new n.fn.sparkline[u.get("type")](this, e, u, c, s),
                h.render(),
                i && i.registerSparkline(h)
            },
            n(this).html() && !u.get("disableHiddenCheck") && n(this).is(":hidden") || n.fn.jquery < "1.3.0" && n(this).parents().is(":hidden") || !n(this).parents("body").length) {
                if (!u.get("composite") && n.data(this, "_jqs_pending")) for (f = i.length; f; f--) i[f - 1][0] == this && i.splice(f - 1, 1);
                i.push([this, e]),
                n.data(this, "_jqs_pending", !0)
            } else e.call(this)
        })
    },
    n.fn.sparkline.defaults = ct(),
    n.sparkline_display_visible = function() {
        for (var r, u = [], t = 0, f = i.length; t < f; t++) r = i[t][0],
        n(r).is(":visible") && !n(r).parents().is(":hidden") ? (i[t][1].call(r), n.data(i[t][0], "_jqs_pending", !1), u.push(t)) : !n(r).closest("html").length && !n.data(r, "_jqs_pending") && (n.data(i[t][0], "_jqs_pending", !1), u.push(t));
        for (t = u.length; t; t--) i.splice(u[t - 1], 1)
    },
    n.fn.sparkline.options = t({
        init: function(t, i) {
            var f,
            r,
            u,
            e;
            this.userOptions = i = i || {},
            this.tag = t,
            this.tagValCache = {},
            r = n.fn.sparkline.defaults,
            u = r.common,
            this.tagOptionsPrefix = i.enableTagOptions && (i.tagOptionsPrefix || u.tagOptionsPrefix),
            e = this.getTagSetting("type"),
            f = e === o ? r[i.type || u.type] : r[e],
            this.mergedOptions = n.extend({},
            u, f, i)
        },
        getTagSetting: function(n) {
            var r = this.tagOptionsPrefix,
            t,
            i,
            f,
            e;
            if (r === !1 || r === undefined) return o;
            if (this.tagValCache.hasOwnProperty(n)) t = this.tagValCache.key;
            else {
                if (t = this.tag.getAttribute(r + n), t === undefined || t === null) t = o;
                else if (t.substr(0, 1) === "[") for (t = t.substr(1, t.length - 2).split(","), i = t.length; i--;) t[i] = u(t[i].replace(/(^\s*)|(\s*$)/g, ""));
                else if (t.substr(0, 1) === "{") for (f = t.substr(1, t.length - 2).split(","), t = {},
                i = f.length; i--;) e = f[i].split(":", 2),
                t[e[0].replace(/(^\s*)|(\s*$)/g, "")] = u(e[1].replace(/(^\s*)|(\s*$)/g, ""));
                else t = u(t);
                this.tagValCache.key = t
            }
            return t
        },
        get: function(n, t) {
            var i = this.getTagSetting(n),
            r;
            return i !== o ? i: (r = this.mergedOptions[n]) === undefined ? t: r
        }
    }),
    n.fn.sparkline._base = t({
        disabled: !1,
        init: function(t, i, r, u, f) {
            this.el = t,
            this.$el = n(t),
            this.values = i,
            this.options = r,
            this.width = u,
            this.height = f,
            this.currentRegion = undefined
        },
        initTarget: function() {
            var n = !this.options.get("disableInteraction"); (this.target = this.$el.simpledraw(this.width, this.height, this.options.get("composite"), n)) ? (this.canvasWidth = this.target.pixelWidth, this.canvasHeight = this.target.pixelHeight) : this.disabled = !0
        },
        render: function() {
            return this.disabled ? (this.el.innerHTML = "", !1) : !0
        },
        getRegion: function() {},
        setRegionHighlight: function(n, t, i) {
            var u = this.currentRegion,
            f = !this.options.get("disableHighlight"),
            r;
            return t > this.canvasWidth || i > this.canvasHeight || t < 0 || i < 0 ? null: (r = this.getRegion(n, t, i), u !== r ? (u !== undefined && f && this.removeHighlight(), this.currentRegion = r, r !== undefined && f && this.renderHighlight(), !0) : !1)
        },
        clearRegionHighlight: function() {
            return this.currentRegion !== undefined ? (this.removeHighlight(), this.currentRegion = undefined, !0) : !1
        },
        renderHighlight: function() {
            this.changeHighlight(!0)
        },
        removeHighlight: function() {
            this.changeHighlight(!1)
        },
        changeHighlight: function() {},
        getCurrentRegionTooltip: function() {
            var i = this.options,
            v = "",
            a = [],
            t,
            e,
            y,
            p,
            w,
            u,
            s,
            h,
            c,
            k,
            l,
            o,
            b,
            f;
            if (this.currentRegion === undefined) return "";
            if (t = this.getCurrentRegionFields(), l = i.get("tooltipFormatter"), l) return l(this, i, t);
            if (i.get("tooltipChartTitle") && (v += '<div class="jqs jqstitle">' + i.get("tooltipChartTitle") + "</div>\n"), e = this.options.get("tooltipFormat"), !e) return "";
            if (n.isArray(e) || (e = [e]), n.isArray(t) || (t = [t]), s = this.options.get("tooltipFormatFieldlist"), h = this.options.get("tooltipFormatFieldlistKey"), s && h) {
                for (c = [], u = t.length; u--;) k = t[u][h],
                (f = n.inArray(k, s)) != -1 && (c[f] = t[u]);
                t = c
            }
            for (y = e.length, b = t.length, u = 0; u < y; u++) for (o = e[u], typeof o == "string" && (o = new r(o)), p = o.fclass || "jqsfield", f = 0; f < b; f++) t[f].isNull && i.get("tooltipSkipNull") || (n.extend(t[f], {
                prefix: i.get("tooltipPrefix"),
                suffix: i.get("tooltipSuffix")
            }), w = o.render(t[f], i.get("tooltipValueLookups"), i), a.push('<div class="' + p + '">' + w + "</div>"));
            return a.length ? v + a.join("\n") : ""
        },
        getCurrentRegionFields: function() {},
        calcHighlightColor: function(n, t) {
            var e = t.get("highlightColor"),
            o = t.get("highlightLighten"),
            r,
            s,
            u,
            i;
            if (e) return e;
            if (o && (r = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(n) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(n), r)) {
                for (u = [], s = n.length === 4 ? 16: 1, i = 0; i < 3; i++) u[i] = f(Math.round(parseInt(r[i + 1], 16) * s * o), 0, 255);
                return "rgb(" + u.join(",") + ")"
            }
            return n
        }
    }),
    h = {
        changeHighlight: function(t) {
            var r = this.currentRegion,
            f = this.target,
            u = this.regionShapes[r],
            i;
            u && (i = this.renderRegion(r, t), n.isArray(i) || n.isArray(u) ? (f.replaceWithShapes(u, i), this.regionShapes[r] = n.map(i, 
            function(n) {
                return n.id
            })) : (f.replaceWithShape(u, i), this.regionShapes[r] = i.id))
        },
        render: function() {
            var e = this.values,
            o = this.target,
            u = this.regionShapes,
            t,
            f,
            i,
            r;
            if (this.cls._super.render.call(this)) {
                for (i = e.length; i--;) if (t = this.renderRegion(i), t) if (n.isArray(t)) {
                    for (f = [], r = t.length; r--;) t[r].append(),
                    f.push(t[r].id);
                    u[i] = f
                } else t.append(),
                u[i] = t.id;
                else u[i] = null;
                o.render()
            }
        }
    },
    n.fn.sparkline.line = l = t(n.fn.sparkline._base, {
        type: "line",
        init: function(n, t, i, r, u) {
            l._super.init.call(this, n, t, i, r, u),
            this.vertices = [],
            this.regionMap = [],
            this.xvalues = [],
            this.yvalues = [],
            this.yminmax = [],
            this.hightlightSpotId = null,
            this.lastShapeId = null,
            this.initTarget()
        },
        getRegion: function(n, t) {
            for (var u = this.regionMap, r = u.length; r--;) if (u[r] !== null && t >= u[r][0] && t <= u[r][1]) return u[r][2];
            return undefined
        },
        getCurrentRegionFields: function() {
            var n = this.currentRegion;
            return {
                isNull: this.yvalues[n] === null,
                x: this.xvalues[n],
                y: this.yvalues[n],
                color: this.options.get("lineColor"),
                fillColor: this.options.get("fillColor"),
                offset: n
            }
        },
        renderHighlight: function() {
            var s = this.currentRegion,
            t = this.target,
            n = this.vertices[s],
            i = this.options,
            f = i.get("spotRadius"),
            e = i.get("highlightSpotColor"),
            o = i.get("highlightLineColor"),
            r,
            u;
            n && (f && e && (r = t.drawCircle(n[0], n[1], f, undefined, e), this.highlightSpotId = r.id, t.insertAfterShape(this.lastShapeId, r)), o && (u = t.drawLine(n[0], this.canvasTop, n[0], this.canvasTop + this.canvasHeight, o), this.highlightLineId = u.id, t.insertAfterShape(this.lastShapeId, u)))
        },
        removeHighlight: function() {
            var n = this.target;
            this.highlightSpotId && (n.removeShapeId(this.highlightSpotId), this.highlightSpotId = null),
            this.highlightLineId && (n.removeShapeId(this.highlightLineId), this.highlightLineId = null)
        },
        scanValues: function() {
            for (var t = this.values, h = t.length, i = this.xvalues, f = this.yvalues, r = this.yminmax, u, o, s, e, n = 0; n < h; n++) u = t[n],
            o = typeof t[n] == "string",
            s = typeof t[n] == "object" && t[n] instanceof Array,
            e = o && t[n].split(":"),
            o && e.length === 2 ? (i.push(Number(e[0])), f.push(Number(e[1])), r.push(Number(e[1]))) : s ? (i.push(u[0]), f.push(u[1]), r.push(u[1])) : (i.push(n), t[n] === null || t[n] === "null" ? f.push(null) : (f.push(Number(u)), r.push(Number(u))));
            this.options.get("xvalues") && (i = this.options.get("xvalues")),
            this.maxy = this.maxyorg = Math.max.apply(Math, r),
            this.miny = this.minyorg = Math.min.apply(Math, r),
            this.maxx = Math.max.apply(Math, i),
            this.minx = Math.min.apply(Math, i),
            this.xvalues = i,
            this.yvalues = f,
            this.yminmax = r
        },
        processRangeOptions: function() {
            var n = this.options,
            t = n.get("normalRangeMin"),
            i = n.get("normalRangeMax");
            t !== undefined && (t < this.miny && (this.miny = t), i > this.maxy && (this.maxy = i)),
            n.get("chartRangeMin") !== undefined && (n.get("chartRangeClip") || n.get("chartRangeMin") < this.miny) && (this.miny = n.get("chartRangeMin")),
            n.get("chartRangeMax") !== undefined && (n.get("chartRangeClip") || n.get("chartRangeMax") > this.maxy) && (this.maxy = n.get("chartRangeMax")),
            n.get("chartRangeMinX") !== undefined && (n.get("chartRangeClipX") || n.get("chartRangeMinX") < this.minx) && (this.minx = n.get("chartRangeMinX")),
            n.get("chartRangeMaxX") !== undefined && (n.get("chartRangeClipX") || n.get("chartRangeMaxX") > this.maxx) && (this.maxx = n.get("chartRangeMaxX"))
        },
        drawNormalRange: function(n, t, i, r, u) {
            var e = this.options.get("normalRangeMin"),
            f = this.options.get("normalRangeMax"),
            o = t + Math.round(i - i * ((f - this.miny) / u)),
            s = Math.round(i * (f - e) / u);
            this.target.drawRect(n, o, r, s, undefined, this.options.get("normalRangeColor")).append()
        },
        render: function() {
            var i = this.options,
            v = this.target,
            s = this.canvasWidth,
            f = this.canvasHeight,
            lt = this.vertices,
            r = i.get("spotRadius"),
            at = this.regionMap,
            w,
            y,
            k,
            h,
            c,
            ot,
            u,
            ut,
            d,
            p,
            ht,
            g,
            ct,
            et,
            ft,
            tt,
            it,
            rt,
            b,
            nt,
            st,
            a,
            o,
            t;
            if (l._super.render.call(this) && (this.scanValues(), this.processRangeOptions(), a = this.xvalues, o = this.yvalues, this.yminmax.length && !(this.yvalues.length < 2))) {
                for (h = c = 0, w = this.maxx - this.minx == 0 ? 1: this.maxx - this.minx, y = this.maxy - this.miny == 0 ? 1: this.maxy - this.miny, k = this.yvalues.length - 1, r && (s < r * 4 || f < r * 4) && (r = 0), r && ((i.get("minSpotColor") || i.get("spotColor") && o[k] === this.miny) && (f -= Math.ceil(r)), (i.get("maxSpotColor") || i.get("spotColor") && o[k] === this.maxy) && (f -= Math.ceil(r), h += Math.ceil(r)), (i.get("minSpotColor") || i.get("maxSpotColor")) && (o[0] === this.miny || o[0] === this.maxy) && (c += Math.ceil(r), s -= Math.ceil(r)), (i.get("spotColor") || i.get("minSpotColor") || i.get("maxSpotColor") && (o[k] === this.miny || o[k] === this.maxy)) && (s -= Math.ceil(r))), f--, i.get("normalRangeMin") && !i.get("drawNormalOnTop") && this.drawNormalRange(c, h, f, s, y), u = [], ut = [u], et = ft = null, tt = o.length, t = 0; t < tt; t++) d = a[t],
                ht = a[t + 1],
                p = o[t],
                g = c + Math.round((d - this.minx) * (s / w)),
                ct = t < tt - 1 ? c + Math.round((ht - this.minx) * (s / w)) : s,
                ft = g + (ct - g) / 2,
                at[t] = [et || 0, ft, t],
                et = ft,
                p === null ? t && o[t - 1] !== null && (u = [], ut.push(u), lt.push(null)) : (p < this.miny && (p = this.miny), p > this.maxy && (p = this.maxy), u.length || u.push([g, h + f]), ot = [g, h + Math.round(f - f * ((p - this.miny) / y))], u.push(ot), lt.push(ot));
                for (it = [], rt = [], b = ut.length, t = 0; t < b; t++) u = ut[t],
                u.length && (i.get("fillColor") && (u.push([u[u.length - 1][0], h + f]), rt.push(u.slice(0)), u.pop()), u.length > 2 && (u[0] = [u[0][0], u[1][1]]), it.push(u));
                for (b = rt.length, t = 0; t < b; t++) v.drawShape(rt[t], i.get("fillColor"), i.get("fillColor")).append();
                for (i.get("normalRangeMin") && i.get("drawNormalOnTop") && this.drawNormalRange(c, h, f, s, y), b = it.length, t = 0; t < b; t++) v.drawShape(it[t], i.get("lineColor"), undefined, i.get("lineWidth")).append();
                if (r && i.get("valueSpots")) for (nt = i.get("valueSpots"), nt.get === undefined && (nt = new e(nt)), t = 0; t < tt; t++) st = nt.get(o[t]),
                st && v.drawCircle(c + Math.round((a[t] - this.minx) * (s / w)), h + Math.round(f - f * ((o[t] - this.miny) / y)), r, undefined, st).append();
                r && i.get("spotColor") && v.drawCircle(c + Math.round((a[a.length - 1] - this.minx) * (s / w)), h + Math.round(f - f * ((o[k] - this.miny) / y)), r, undefined, i.get("spotColor")).append(),
                this.maxy !== this.minyorg && (r && i.get("minSpotColor") && (d = a[n.inArray(this.minyorg, o)], v.drawCircle(c + Math.round((d - this.minx) * (s / w)), h + Math.round(f - f * ((this.minyorg - this.miny) / y)), r, undefined, i.get("minSpotColor")).append()), r && i.get("maxSpotColor") && (d = a[n.inArray(this.maxyorg, o)], v.drawCircle(c + Math.round((d - this.minx) * (s / w)), h + Math.round(f - f * ((this.maxyorg - this.miny) / y)), r, undefined, i.get("maxSpotColor")).append())),
                this.lastShapeId = v.getLastShapeId(),
                this.canvasTop = h,
                v.render()
            }
        }
    }),
    n.fn.sparkline.bar = it = t(n.fn.sparkline._base, h, {
        type: "bar",
        init: function(t, i, r, o, s) {
            var pt = parseInt(r.get("barWidth"), 10),
            yt = parseInt(r.get("barSpacing"), 10),
            ni = r.get("chartRangeMin"),
            bt = r.get("chartRangeMax"),
            at = r.get("chartRangeClip"),
            d = Infinity,
            b = -Infinity,
            ot,
            et,
            wt,
            g,
            w,
            c,
            rt,
            vt,
            tt,
            p,
            l,
            a,
            ct,
            lt,
            v,
            nt,
            k,
            kt,
            dt,
            h,
            y,
            gt,
            ti,
            ut,
            ft;
            for (it._super.init.call(this, t, i, r, o, s), c = 0, rt = i.length; c < rt; c++) h = i[c],
            ot = typeof h == "string" && h.indexOf(":") > -1,
            (ot || n.isArray(h)) && (v = !0, ot && (h = i[c] = ht(h.split(":"))), h = st(h, null), et = Math.min.apply(Math, h), wt = Math.max.apply(Math, h), et < d && (d = et), wt > b && (b = wt));
            for (this.stacked = v, this.regionShapes = {},
            this.barWidth = pt, this.barSpacing = yt, this.totalBarWidth = pt + yt, this.width = o = i.length * pt + (i.length - 1) * yt, this.initTarget(), at && (ct = ni === undefined ? -Infinity: ni, lt = bt === undefined ? Infinity: bt), w = [], g = v ? [] : w, ut = [], ft = [], c = 0, rt = i.length; c < rt; c++) if (v) for (nt = i[c], i[c] = dt = [], ut[c] = 0, g[c] = ft[c] = 0, k = 0, kt = nt.length; k < kt; k++) h = dt[k] = at ? f(nt[k], ct, lt) : nt[k],
            h !== null && (h > 0 && (ut[c] += h), d < 0 && b > 0 ? h < 0 ? ft[c] += Math.abs(h) : g[c] += h: g[c] += Math.abs(h - (h < 0 ? b: d)), w.push(h));
            else h = at ? f(i[c], ct, lt) : i[c],
            h = i[c] = u(h),
            h !== null && w.push(h);
            this.max = a = Math.max.apply(Math, w),
            this.min = l = Math.min.apply(Math, w),
            this.stackMax = b = v ? Math.max.apply(Math, ut) : a,
            this.stackMin = d = v ? Math.min.apply(Math, w) : l,
            r.get("chartRangeMin") !== undefined && (r.get("chartRangeClip") || r.get("chartRangeMin") < l) && (l = r.get("chartRangeMin")),
            r.get("chartRangeMax") !== undefined && (r.get("chartRangeClip") || r.get("chartRangeMax") > a) && (a = r.get("chartRangeMax")),
            this.zeroAxis = tt = r.get("zeroAxis", !0),
            p = l <= 0 && a >= 0 && tt ? 0: tt == 0 ? l: l > 0 ? l: a,
            this.xaxisOffset = p,
            vt = v ? Math.max.apply(Math, g) + Math.max.apply(Math, ft) : a - l,
            this.canvasHeightEf = tt && l < 0 ? this.canvasHeight - 2: this.canvasHeight - 1,
            l < p ? (gt = v && a >= 0 ? b: a, y = (gt - p) / vt * this.canvasHeight, y !== Math.ceil(y) && (this.canvasHeightEf -= 2, y = Math.ceil(y))) : y = this.canvasHeight,
            this.yoffset = y,
            n.isArray(r.get("colorMap")) ? (this.colorMapByIndex = r.get("colorMap"), this.colorMapByValue = null) : (this.colorMapByIndex = null, this.colorMapByValue = r.get("colorMap"), this.colorMapByValue && this.colorMapByValue.get === undefined && (this.colorMapByValue = new e(this.colorMapByValue))),
            this.range = vt
        },
        getRegion: function(n, t) {
            var r = Math.floor(t / this.totalBarWidth);
            return r < 0 || r >= this.values.length ? undefined: r
        },
        getCurrentRegionFields: function() {
            for (var i = this.currentRegion, r = ft(this.values[i]), u = [], n, t = r.length; t--;) n = r[t],
            u.push({
                isNull: n === null,
                value: n,
                color: this.calcColor(t, n, i),
                offset: i
            });
            return u
        },
        calcColor: function(t, i, r) {
            var e = this.colorMapByIndex,
            o = this.colorMapByValue,
            f = this.options,
            u,
            s;
            return u = this.stacked ? f.get("stackedBarColor") : i < 0 ? f.get("negBarColor") : f.get("barColor"),
            i === 0 && f.get("zeroColor") !== undefined && (u = f.get("zeroColor")),
            o && (s = o.get(i)) ? u = s: e && e.length > r && (u = e[r]),
            n.isArray(u) ? u[t % u.length] : u
        },
        renderRegion: function(t, i) {
            var r = this.values[t],
            s = this.options,
            h = this.xaxisOffset,
            v = [],
            g = this.range,
            tt = this.stacked,
            d = this.target,
            k = t * this.totalBarWidth,
            it = this.canvasHeightEf,
            e = this.yoffset,
            l,
            o,
            u,
            w,
            y,
            c,
            p,
            f,
            nt,
            b;
            if (r = n.isArray(r) ? r: [r], p = r.length, f = r[0], w = a(null, r), b = a(h, r, !0), w) return s.get("nullColor") ? (u = i ? s.get("nullColor") : this.calcHighlightColor(s.get("nullColor"), s), l = e > 0 ? e - 1: e, d.drawRect(k, l, this.barWidth - 1, 0, u, u)) : undefined;
            for (y = e, c = 0; c < p; c++) {
                if (f = r[c], tt && f === h) {
                    if (!b || nt) continue;
                    nt = !0
                }
                o = g > 0 ? Math.floor(it * (Math.abs(f - h) / g)) + 1: 1,
                f < h || f === h && e === 0 ? (l = y, y += o) : (l = e - o, e -= o),
                u = this.calcColor(c, f, t),
                i && (u = this.calcHighlightColor(u, s)),
                v.push(d.drawRect(k, l, this.barWidth - 1, o - 1, u, u))
            }
            return v.length === 1 ? v[0] : v
        }
    }),
    n.fn.sparkline.tristate = lt = t(n.fn.sparkline._base, h, {
        type: "tristate",
        init: function(t, i, r, u, f) {
            var o = parseInt(r.get("barWidth"), 10),
            s = parseInt(r.get("barSpacing"), 10);
            lt._super.init.call(this, t, i, r, u, f),
            this.regionShapes = {},
            this.barWidth = o,
            this.barSpacing = s,
            this.totalBarWidth = o + s,
            this.values = n.map(i, Number),
            this.width = u = i.length * o + (i.length - 1) * s,
            n.isArray(r.get("colorMap")) ? (this.colorMapByIndex = r.get("colorMap"), this.colorMapByValue = null) : (this.colorMapByIndex = null, this.colorMapByValue = r.get("colorMap"), this.colorMapByValue && this.colorMapByValue.get === undefined && (this.colorMapByValue = new e(this.colorMapByValue))),
            this.initTarget()
        },
        getRegion: function(n, t) {
            return Math.floor(t / this.totalBarWidth)
        },
        getCurrentRegionFields: function() {
            var n = this.currentRegion;
            return {
                isNull: this.values[n] === undefined,
                value: this.values[n],
                color: this.calcColor(this.values[n], n),
                offset: n
            }
        },
        calcColor: function(n, t) {
            var f = this.values,
            r = this.options,
            u = this.colorMapByIndex,
            e = this.colorMapByValue,
            i,
            o;
            return i = e && (o = e.get(n)) ? o: u && u.length > t ? u[t] : f[t] < 0 ? r.get("negBarColor") : f[t] > 0 ? r.get("posBarColor") : r.get("zeroBarColor"),
            i
        },
        renderRegion: function(n, t) {
            var e = this.values,
            c = this.options,
            o = this.target,
            s,
            u,
            r,
            h,
            f,
            i;
            if (s = o.pixelHeight, r = Math.round(s / 2), h = n * this.totalBarWidth, e[n] < 0 ? (f = r, u = r - 1) : e[n] > 0 ? (f = 0, u = r - 1) : (f = r - 1, u = 2), i = this.calcColor(e[n], n), i !== null) return t && (i = this.calcHighlightColor(i, c)),
            o.drawRect(h, f, this.barWidth - 1, u - 1, i, i)
        }
    }),
    n.fn.sparkline.discrete = nt = t(n.fn.sparkline._base, h, {
        type: "discrete",
        init: function(t, i, r, u, f) {
            nt._super.init.call(this, t, i, r, u, f),
            this.regionShapes = {},
            this.values = i = n.map(i, Number),
            this.min = Math.min.apply(Math, i),
            this.max = Math.max.apply(Math, i),
            this.range = this.max - this.min,
            this.width = u = r.get("width") === "auto" ? i.length * 2: this.width,
            this.interval = Math.floor(u / i.length),
            this.itemWidth = u / i.length,
            r.get("chartRangeMin") !== undefined && (r.get("chartRangeClip") || r.get("chartRangeMin") < this.min) && (this.min = r.get("chartRangeMin")),
            r.get("chartRangeMax") !== undefined && (r.get("chartRangeClip") || r.get("chartRangeMax") > this.max) && (this.max = r.get("chartRangeMax")),
            this.initTarget(),
            this.target && (this.lineHeight = r.get("lineHeight") === "auto" ? Math.round(this.canvasHeight * .3) : r.get("lineHeight"))
        },
        getRegion: function(n, t) {
            return Math.floor(t / this.itemWidth)
        },
        getCurrentRegionFields: function() {
            var n = this.currentRegion;
            return {
                isNull: this.values[n] === undefined,
                value: this.values[n],
                offset: n
            }
        },
        renderRegion: function(n, t) {
            var l = this.values,
            i = this.options,
            s = this.min,
            a = this.max,
            v = this.range,
            y = this.interval,
            p = this.target,
            w = this.canvasHeight,
            h = this.lineHeight,
            c = w - h,
            u,
            e,
            r,
            o;
            return e = f(l[n], s, a),
            o = n * y,
            u = Math.round(c - c * ((e - s) / v)),
            r = i.get("thresholdColor") && e < i.get("thresholdValue") ? i.get("thresholdColor") : i.get("lineColor"),
            t && (r = this.calcHighlightColor(r, i)),
            p.drawLine(o, u, o, u + h, r)
        }
    }),
    n.fn.sparkline.bullet = v = t(n.fn.sparkline._base, {
        type: "bullet",
        init: function(t, i, r, u, f) {
            var e,
            o;
            v._super.init.call(this, t, i, r, u, f),
            i = n.map(i, Number),
            e = Math.min.apply(Math, i),
            o = Math.max.apply(Math, i),
            e = r.get("base") === undefined ? e < 0 ? e: 0: r.get("base"),
            this.min = e,
            this.max = o,
            this.range = o - e,
            this.shapes = {},
            this.valueShapes = {},
            this.regiondata = {},
            this.width = u = r.get("width") === "auto" ? "4.0em": u,
            this.target = this.$el.simpledraw(u, f, r.get("composite")),
            i.length || (this.disabled = !0),
            this.initTarget()
        },
        getRegion: function(n, t, i) {
            var r = this.target.getShapeAt(n, t, i);
            return r !== undefined && this.shapes[r] !== undefined ? this.shapes[r] : undefined
        },
        getCurrentRegionFields: function() {
            var n = this.currentRegion;
            return {
                fieldkey: n.substr(0, 1),
                value: this.values[n.substr(1)],
                region: n
            }
        },
        changeHighlight: function(n) {
            var i = this.currentRegion,
            r = this.valueShapes[i],
            t;
            delete this.shapes[r];
            switch (i.substr(0, 1)) {
            case "r":
                t = this.renderRange(i.substr(1), n);
                break;
            case "p":
                t = this.renderPerformance(n);
                break;
            case "t":
                t = this.renderTarget(n)
            }
            this.valueShapes[i] = t.id,
            this.shapes[t.id] = i,
            this.target.replaceWithShape(r, t)
        },
        renderRange: function(n, t) {
            var r = this.values[n],
            u = Math.round(this.canvasWidth * ((r - this.min) / this.range)),
            i = this.options.get("rangeColors")[n - 2];
            return t && (i = this.calcHighlightColor(i, this.options)),
            this.target.drawRect(0, 0, u - 1, this.canvasHeight - 1, i, i)
        },
        renderPerformance: function(n) {
            var i = this.values[1],
            r = Math.round(this.canvasWidth * ((i - this.min) / this.range)),
            t = this.options.get("performanceColor");
            return n && (t = this.calcHighlightColor(t, this.options)),
            this.target.drawRect(0, Math.round(this.canvasHeight * .3), r - 1, Math.round(this.canvasHeight * .4) - 1, t, t)
        },
        renderTarget: function(n) {
            var r = this.values[0],
            u = Math.round(this.canvasWidth * ((r - this.min) / this.range) - this.options.get("targetWidth") / 2),
            i = Math.round(this.canvasHeight * .1),
            f = this.canvasHeight - i * 2,
            t = this.options.get("targetColor");
            return n && (t = this.calcHighlightColor(t, this.options)),
            this.target.drawRect(u, i, this.options.get("targetWidth") - 1, f - 1, t, t)
        },
        render: function() {
            var i = this.values.length,
            r = this.target,
            t,
            n;
            if (v._super.render.call(this)) {
                for (t = 2; t < i; t++) n = this.renderRange(t).append(),
                this.shapes[n.id] = "r" + t,
                this.valueShapes["r" + t] = n.id;
                n = this.renderPerformance().append(),
                this.shapes[n.id] = "p1",
                this.valueShapes.p1 = n.id,
                n = this.renderTarget().append(),
                this.shapes[n.id] = "t0",
                this.valueShapes.t0 = n.id,
                r.render()
            }
        }
    }),
    n.fn.sparkline.pie = p = t(n.fn.sparkline._base, {
        type: "pie",
        init: function(t, i, r, u, f) {
            var o = 0,
            e;
            if (p._super.init.call(this, t, i, r, u, f), this.shapes = {},
            this.valueShapes = {},
            this.values = i = n.map(i, Number), r.get("width") === "auto" && (this.width = this.height), i.length > 0) for (e = i.length; e--;) o += i[e];
            this.total = o,
            this.initTarget(),
            this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2)
        },
        getRegion: function(n, t, i) {
            var r = this.target.getShapeAt(n, t, i);
            return r !== undefined && this.shapes[r] !== undefined ? this.shapes[r] : undefined
        },
        getCurrentRegionFields: function() {
            var n = this.currentRegion;
            return {
                isNull: this.values[n] === undefined,
                value: this.values[n],
                percent: this.values[n] / this.total * 100,
                color: this.options.get("sliceColors")[n % this.options.get("sliceColors").length],
                offset: n
            }
        },
        changeHighlight: function(n) {
            var t = this.currentRegion,
            i = this.renderSlice(t, n),
            r = this.valueShapes[t];
            delete this.shapes[r],
            this.target.replaceWithShape(r, i),
            this.valueShapes[t] = i.id,
            this.shapes[i.id] = t
        },
        renderSlice: function(n, t) {
            for (var v = this.target, r = this.options, o = this.radius, y = r.get("borderWidth"), s = r.get("offset"), p = 2 * Math.PI, h = this.values, c = this.total, u = s ? 2 * Math.PI * (s / 360) : 0, l, f, e, a = h.length, i = 0; i < a; i++) {
                if (l = u, f = u, c > 0 && (f = u + p * (h[i] / c)), n === i) return e = r.get("sliceColors")[i % r.get("sliceColors").length],
                t && (e = this.calcHighlightColor(e, r)),
                v.drawPieSlice(o, o, o - y, l, f, undefined, e);
                u = f
            }
        },
        render: function() {
            var u = this.target,
            e = this.values,
            f = this.options,
            t = this.radius,
            i = f.get("borderWidth"),
            r,
            n;
            if (p._super.render.call(this)) {
                for (i && u.drawCircle(t, t, Math.floor(t - i / 2), f.get("borderColor"), undefined, i).append(), n = e.length; n--;) r = this.renderSlice(n).append(),
                this.valueShapes[n] = r.id,
                this.shapes[r.id] = n;
                u.render()
            }
        }
    }),
    n.fn.sparkline.box = y = t(n.fn.sparkline._base, {
        type: "box",
        init: function(t, i, r, u, f) {
            y._super.init.call(this, t, i, r, u, f),
            this.values = n.map(i, Number),
            this.width = r.get("width") === "auto" ? "4.0em": u,
            this.initTarget(),
            this.values.length || (this.disabled = 1)
        },
        getRegion: function() {
            return 1
        },
        getCurrentRegionFields: function() {
            var n = [{
                field: "lq",
                value: this.quartiles[0]
            },
            {
                field: "med",
                value: this.quartiles[1]
            },
            {
                field: "uq",
                value: this.quartiles[2]
            },
            {
                field: "lo",
                value: this.loutlier
            },
            {
                field: "ro",
                value: this.routlier
            }];
            return this.lwhisker !== undefined && n.push({
                field: "lw",
                value: this.lwhisker
            }),
            this.rwhisker !== undefined && n.push({
                field: "rw",
                value: this.rwhisker
            }),
            n
        },
        render: function() {
            var o = this.target,
            t = this.values,
            k = t.length,
            n = this.options,
            g = this.canvasWidth,
            r = this.canvasHeight,
            u = n.get("chartRangeMin") === undefined ? Math.min.apply(Math, t) : n.get("chartRangeMin"),
            nt = n.get("chartRangeMax") === undefined ? Math.max.apply(Math, t) : n.get("chartRangeMax"),
            f = 0,
            e,
            w,
            d,
            c,
            v,
            l,
            h,
            b,
            a,
            p,
            i;
            if (y._super.render.call(this)) {
                if (n.get("raw")) n.get("showOutliers") && t.length > 5 ? (w = t[0], e = t[1], c = t[2], v = t[3], l = t[4], h = t[5], b = t[6]) : (e = t[0], c = t[1], v = t[2], l = t[3], h = t[4]);
                else if (t.sort(function(n, t) {
                    return n - t
                }), c = s(t, 1), v = s(t, 2), l = s(t, 3), d = l - c, n.get("showOutliers")) {
                    for (e = h = undefined, a = 0; a < k; a++) e === undefined && t[a] > c - d * n.get("outlierIQR") && (e = t[a]),
                    t[a] < l + d * n.get("outlierIQR") && (h = t[a]);
                    w = t[0],
                    b = t[k - 1]
                } else e = t[0],
                h = t[k - 1];
                this.quartiles = [c, v, l],
                this.lwhisker = e,
                this.rwhisker = h,
                this.loutlier = w,
                this.routlier = b,
                i = g / (nt - u + 1),
                n.get("showOutliers") && (f = Math.ceil(n.get("spotRadius")), g -= 2 * Math.ceil(n.get("spotRadius")), i = g / (nt - u + 1), w < e && o.drawCircle((w - u) * i + f, r / 2, n.get("spotRadius"), n.get("outlierLineColor"), n.get("outlierFillColor")).append(), b > h && o.drawCircle((b - u) * i + f, r / 2, n.get("spotRadius"), n.get("outlierLineColor"), n.get("outlierFillColor")).append()),
                o.drawRect(Math.round((c - u) * i + f), Math.round(r * .1), Math.round((l - c) * i), Math.round(r * .8), n.get("boxLineColor"), n.get("boxFillColor")).append(),
                o.drawLine(Math.round((e - u) * i + f), Math.round(r / 2), Math.round((c - u) * i + f), Math.round(r / 2), n.get("lineColor")).append(),
                o.drawLine(Math.round((e - u) * i + f), Math.round(r / 4), Math.round((e - u) * i + f), Math.round(r - r / 4), n.get("whiskerColor")).append(),
                o.drawLine(Math.round((h - u) * i + f), Math.round(r / 2), Math.round((l - u) * i + f), Math.round(r / 2), n.get("lineColor")).append(),
                o.drawLine(Math.round((h - u) * i + f), Math.round(r / 4), Math.round((h - u) * i + f), Math.round(r - r / 4), n.get("whiskerColor")).append(),
                o.drawLine(Math.round((v - u) * i + f), Math.round(r * .1), Math.round((v - u) * i + f), Math.round(r * .9), n.get("medianColor")).append(),
                n.get("target") && (p = Math.ceil(n.get("spotRadius")), o.drawLine(Math.round((n.get("target") - u) * i + f), Math.round(r / 2 - p), Math.round((n.get("target") - u) * i + f), Math.round(r / 2 + p), n.get("targetColor")).append(), o.drawLine(Math.round((n.get("target") - u) * i + f - p), Math.round(r / 2), Math.round((n.get("target") - u) * i + f + p), Math.round(r / 2), n.get("targetColor")).append()),
                o.render()
            }
        }
    }),
    n.browser.msie && !document.namespaces.v && document.namespaces.add("v", "urn:schemas-microsoft-com:vml", "#default#VML"),
    n.browser.hasCanvas === undefined && (n.browser.hasCanvas = document.createElement("canvas").getContext !== undefined),
    k = t({
        init: function(n, t, i, r) {
            this.target = n,
            this.id = t,
            this.type = i,
            this.args = r
        },
        append: function() {
            return this.target.appendShape(this),
            this
        }
    }),
    c = t({
        _pxregex: /(\d+)(px)?\s*$/i,
        init: function(t, i, r) {
            t && (this.width = t, this.height = i, this.target = r, this.lastShapeId = null, r[0] && (r = r[0]), n.data(r, "_jqs_vcanvas", this))
        },
        drawLine: function(n, t, i, r, u, f) {
            return this.drawShape([[n, t], [i, r]], u, f)
        },
        drawShape: function(n, t, i, r) {
            return this._genShape("Shape", [n, t, i, r])
        },
        drawCircle: function(n, t, i, r, u, f) {
            return this._genShape("Circle", [n, t, i, r, u, f])
        },
        drawPieSlice: function(n, t, i, r, u, f, e) {
            return this._genShape("PieSlice", [n, t, i, r, u, f, e])
        },
        drawRect: function(n, t, i, r, u, f) {
            return this._genShape("Rect", [n, t, i, r, u, f])
        },
        getElement: function() {
            return this.canvas
        },
        getLastShapeId: function() {
            return this.lastShapeId
        },
        reset: function() {
            alert("reset not implemented")
        },
        _insert: function(t, i) {
            n(i).html(t)
        },
        _calculatePixelDims: function(t, i, r) {
            var u;
            u = this._pxregex.exec(i),
            this.pixelHeight = u ? u[1] : n(r).height(),
            u = this._pxregex.exec(t),
            this.pixelWidth = u ? u[1] : n(r).width()
        },
        _genShape: function(n, t) {
            var i = vt++;
            return t.unshift(i),
            new k(this, i, n, t)
        },
        appendShape: function() {
            alert("appendShape not implemented")
        },
        replaceWithShape: function() {
            alert("replaceWithShape not implemented")
        },
        insertAfterShape: function() {
            alert("insertAfterShape not implemented")
        },
        removeShapeId: function() {
            alert("removeShapeId not implemented")
        },
        getShapeAt: function() {
            alert("getShapeAt not implemented")
        },
        render: function() {
            alert("render not implemented")
        }
    }),
    b = t(c, {
        init: function(t, i, r, u) {
            b._super.init.call(this, t, i, r),
            this.canvas = document.createElement("canvas"),
            r[0] && (r = r[0]),
            n.data(r, "_jqs_vcanvas", this),
            n(this.canvas).css({
                display: "inline-block",
                width: t,
                height: i,
                verticalAlign: "top"
            }),
            this._insert(this.canvas, r),
            this._calculatePixelDims(t, i, this.canvas),
            this.canvas.width = this.pixelWidth,
            this.canvas.height = this.pixelHeight,
            this.interact = u,
            this.shapes = {},
            this.shapeseq = [],
            this.currentTargetShapeId = undefined,
            n(this.canvas).css({
                width: this.pixelWidth,
                height: this.pixelHeight
            })
        },
        _getContext: function(n, t, i) {
            var r = this.canvas.getContext("2d");
            return n !== undefined && (r.strokeStyle = n),
            r.lineWidth = i === undefined ? 1: i,
            t !== undefined && (r.fillStyle = t),
            r
        },
        reset: function() {
            var n = this._getContext();
            n.clearRect(0, 0, this.pixelWidth, this.pixelHeight),
            this.shapes = {},
            this.shapeseq = [],
            this.currentTargetShapeId = undefined
        },
        _drawShape: function(n, t, i, r, u) {
            var f = this._getContext(i, r, u),
            e,
            o;
            for (f.beginPath(), f.moveTo(t[0][0] + .5, t[0][1] + .5), e = 1, o = t.length; e < o; e++) f.lineTo(t[e][0] + .5, t[e][1] + .5);
            i !== undefined && f.stroke(),
            r !== undefined && f.fill(),
            this.targetX !== undefined && this.targetY !== undefined && f.isPointInPath(this.targetX, this.targetY) && (this.currentTargetShapeId = n)
        },
        _drawCircle: function(n, t, i, r, u, f, e) {
            var o = this._getContext(u, f, e);
            o.beginPath(),
            o.arc(t, i, r, 0, 2 * Math.PI, !1),
            this.targetX !== undefined && this.targetY !== undefined && o.isPointInPath(this.targetX, this.targetY) && (this.currentTargetShapeId = n),
            u !== undefined && o.stroke(),
            f !== undefined && o.fill()
        },
        _drawPieSlice: function(n, t, i, r, u, f, e, o) {
            var s = this._getContext(e, o);
            s.beginPath(),
            s.moveTo(t, i),
            s.arc(t, i, r, u, f, !1),
            s.lineTo(t, i),
            s.closePath(),
            e !== undefined && s.stroke(),
            o && s.fill(),
            this.targetX !== undefined && this.targetY !== undefined && s.isPointInPath(this.targetX, this.targetY) && (this.currentTargetShapeId = n)
        },
        _drawRect: function(n, t, i, r, u, f, e) {
            return this._drawShape(n, [[t, i], [t + r, i], [t + r, i + u], [t, i + u], [t, i]], f, e)
        },
        appendShape: function(n) {
            return this.shapes[n.id] = n,
            this.shapeseq.push(n.id),
            this.lastShapeId = n.id,
            n.id
        },
        replaceWithShape: function(n, t) {
            var r = this.shapeseq,
            i;
            for (this.shapes[t.id] = t, i = r.length; i--;) r[i] == n && (r[i] = t.id);
            delete this.shapes[n]
        },
        replaceWithShapes: function(n, t) {
            for (var r = this.shapeseq, f = {},
            u, e, i = n.length; i--;) f[n[i]] = !0;
            for (i = r.length; i--;) u = r[i],
            f[u] && (r.splice(i, 1), delete this.shapes[u], e = i);
            for (i = t.length; i--;) r.splice(e, 0, t[i].id),
            this.shapes[t[i].id] = t[i]
        },
        insertAfterShape: function(n, t) {
            for (var r = this.shapeseq, i = r.length; i--;) if (r[i] === n) {
                r.splice(i + 1, 0, t.id),
                this.shapes[t.id] = t;
                return
            }
        },
        removeShapeId: function(n) {
            for (var i = this.shapeseq, t = i.length; t--;) if (i[t] === n) {
                i.splice(t, 1);
                break
            }
            delete this.shapes[n]
        },
        getShapeAt: function(n, t, i) {
            return this.targetX = t,
            this.targetY = i,
            this.render(),
            this.currentTargetShapeId
        },
        render: function() {
            var i = this.shapeseq,
            u = this.shapes,
            f = i.length,
            e = this._getContext(),
            r,
            t,
            n;
            for (e.clearRect(0, 0, this.pixelWidth, this.pixelHeight), n = 0; n < f; n++) r = i[n],
            t = u[r],
            this["_draw" + t.type].apply(this, t.args);
            this.interact || (this.shapes = {},
            this.shapeseq = [])
        }
    }),
    w = t(c, {
        init: function(t, i, r) {
            var u;
            w._super.init.call(this, t, i, r),
            r[0] && (r = r[0]),
            n.data(r, "_jqs_vcanvas", this),
            this.canvas = document.createElement("span"),
            n(this.canvas).css({
                display: "inline-block",
                position: "relative",
                overflow: "hidden",
                width: t,
                height: i,
                margin: "0px",
                padding: "0px",
                verticalAlign: "top"
            }),
            this._insert(this.canvas, r),
            this._calculatePixelDims(t, i, this.canvas),
            this.canvas.width = this.pixelWidth,
            this.canvas.height = this.pixelHeight,
            u = '<v:group coordorigin="0 0" coordsize="' + this.pixelWidth + " " + this.pixelHeight + '" style="position:absolute;top:0;left:0;width:' + this.pixelWidth + "px;height=" + this.pixelHeight + 'px;"></v:group>',
            this.canvas.insertAdjacentHTML("beforeEnd", u),
            this.group = n(this.canvas).children()[0],
            this.rendered = !1,
            this.prerender = ""
        },
        _drawShape: function(n, t, i, r, u) {
            for (var f = [], o, s, h, c, l, e = 0, a = t.length; e < a; e++) f[e] = "" + t[e][0] + "," + t[e][1];
            return o = f.splice(0, 1),
            u = u === undefined ? 1: u,
            s = i === undefined ? ' stroked="false" ': ' strokeWeight="' + u + 'px" strokeColor="' + i + '" ',
            h = r === undefined ? ' filled="false"': ' fillColor="' + r + '" filled="true" ',
            c = f[0] === f[f.length - 1] ? "x ": "",
            l = '<v:shape coordorigin="0 0" coordsize="' + this.pixelWidth + " " + this.pixelHeight + '"  id="jqsshape' + n + '" ' + s + h + ' style="position:absolute;left:0px;top:0px;height:' + this.pixelHeight + "px;width:" + this.pixelWidth + 'px;padding:0px;margin:0px;"  path="m ' + o + " l " + f.join(", ") + " " + c + 'e"> </v:shape>',
            l
        },
        _drawCircle: function(n, t, i, r, u, f, e) {
            var o,
            s,
            h;
            return t -= r,
            i -= r,
            o = u === undefined ? ' stroked="false" ': ' strokeWeight="' + e + 'px" strokeColor="' + u + '" ',
            s = f === undefined ? ' filled="false"': ' fillColor="' + f + '" filled="true" ',
            h = '<v:oval  id="jqsshape' + n + '" ' + o + s + ' style="position:absolute;top:' + i + "px; left:" + t + "px; width:" + r * 2 + "px; height:" + r * 2 + 'px"></v:oval>',
            h
        },
        _drawPieSlice: function(n, t, i, r, u, f, e, o) {
            var a,
            s,
            h,
            c,
            l,
            v,
            y,
            p;
            if (u !== f) return (f - u == 2 * Math.PI && (u = 0, f = 2 * Math.PI), s = t + Math.round(Math.cos(u) * r), h = i + Math.round(Math.sin(u) * r), c = t + Math.round(Math.cos(f) * r), l = i + Math.round(Math.sin(f) * r), s === c && h === l && f - u < Math.PI) ? void 0: (a = [t - r, i - r, t + r, i + r, s, h, c, l], v = e === undefined ? ' stroked="false" ': ' strokeWeight="1px" strokeColor="' + e + '" ', y = o === undefined ? ' filled="false"': ' fillColor="' + o + '" filled="true" ', p = '<v:shape coordorigin="0 0" coordsize="' + this.pixelWidth + " " + this.pixelHeight + '"  id="jqsshape' + n + '" ' + v + y + ' style="position:absolute;left:0px;top:0px;height:' + this.pixelHeight + "px;width:" + this.pixelWidth + 'px;padding:0px;margin:0px;"  path="m ' + t + "," + i + " wa " + a.join(", ") + ' x e"> </v:shape>', p)
        },
        _drawRect: function(n, t, i, r, u, f, e) {
            return this._drawShape(n, [[t, i], [t, i + u], [t + r, i + u], [t + r, i], [t, i]], f, e)
        },
        reset: function() {
            this.group.innerHTML = ""
        },
        appendShape: function(n) {
            var t = this["_draw" + n.type].apply(this, n.args);
            return this.rendered ? this.group.insertAdjacentHTML("beforeEnd", t) : this.prerender += t,
            this.lastShapeId = n.id,
            n.id
        },
        replaceWithShape: function(t, i) {
            var r = n("#jqsshape" + t),
            u = this["_draw" + i.type].apply(this, i.args);
            r[0].outerHTML = u
        },
        replaceWithShapes: function(t, i) {
            for (var f = n("#jqsshape" + t[0]), u = "", e = i.length, r = 0; r < e; r++) u += this["_draw" + i[r].type].apply(this, i[r].args);
            for (f[0].outerHTML = u, r = 1; r < t.length; r++) n("#jqsshape" + t[r]).remove()
        },
        insertAfterShape: function(t, i) {
            var r = n("#jqsshape" + t),
            u = this["_draw" + i.type].apply(this, i.args);
            r[0].insertAdjacentHTML("afterEnd", u)
        },
        removeShapeId: function(t) {
            var i = n("#jqsshape" + t);
            this.group.removeChild(i[0])
        },
        getShapeAt: function(n) {
            return n.id.substr(8)
        },
        render: function() {
            this.rendered || (this.group.innerHTML = this.prerender, this.rendered = !0)
        }
    })
} (jQuery);
var osmosis = function() {
    function t() {
        $("input, textarea").placeholder(),
        $("abbr.timeago").timeago(),
        $("#content").find(".first").focus(),
        $("#alert-msg").click(function() {
            $("#msgHere").text(""),
            $("#alert-msg").hide()
        })
    }
    function i() {
        $("#logo").append('<div class="waiting"><img src="/content/img/waiting.png" alt="" /></div>');
        var n = $(".waiting");
        n.addClass("fadein").removeClass("fadeout"),
        n.css({
            "margin-left": n.width() / -2 - 40
        })
    }
    function n() {
        $(".waiting").addClass("fadeout").removeClass("fadein"),
        setTimeout(function() {
            $(".waiting").remove()
        },
        3e3)
    }
    function r() {
        var n = $(".flash");
        n.length > 0 && (n.addClass("fadeout").removeClass("fadein"), setTimeout(function() {
            n.remove()
        },
        1e3))
    }
    function u(t) {
        var i,
        u;
        n(),
        i = t.Succeed ? '<div class="flash success"><img class="success" src="/content/img/flash-success.png" alt="" /></div>': '<div class="flash error"><img class="error" src="/content/img/flash-error.png" alt="" /><span>' + t.Message + "</span></div>",
        $("#logo").append(i),
        $(".flash").addClass("fadein").removeClass("fadeout"),
        u = $(".flash"),
        u.css({
            "margin-left": u.width() / -2 - 40
        }),
        setTimeout(function() {
            r()
        },
        t.Succeed ? 1200: 3200)
    }
    function f(n, t) {
        $("#msgHere").html(n),
        $("#alert-msg").removeClass("okay").removeClass("error").addClass(t ? "error": "okay").addClass("show").show()
    }
    function e(n, t, i, r, u, f, e) {
        var o = null,
        h = $.trim(n.text()),
        s = h;
        if (t == 1 || t == 4 ? (n.html('<input type="' + (t == 1 ? "text": "password") + '" value="' + h + '" />'), o = n.find("input")) : t == 2 ? (n.html('<textarea class="textarea">' + h + "</textarea>"), o = n.find(".textarea")) : t == 3 && (f != "" && n.html(f), o = n.find("select")), o.focus(), t == 1 || t == 2 || t == 4) {
            o.select();
            $("html").on("click", 
            function() {
                o.hasClass("editable") ? (s = o.val(), s == "" && (s = i), r != "" && n.html(r.replace("[val]", s)), h != s && u(s), o.off(), $(this).off()) : o.addClass("editable")
            })
        }
        if (t == 1 || t == 4) {
            o.on("keydown", 
            function(t) {
                t.keyCode == 13 ? (s = o.attr("value"), s == "" && (s = i), n.removeClass("editable").html(r.replace("[val]", s)), h != s && u(s), o.off(), $("html").off()) : t.keyCode == 27 && (n.removeClass("editable").html(r.replace("[val]", h)), o.off(), $("html").off())
            });
            if (e && typeof e == "function") o.on("keyup", 
            function() {
                e(o.val())
            })
        }
    }
    return {
        init: t,
        spin: i,
        stopSpin: n,
        actionState: u,
        notify: f,
        makeEditable: e
    }
} (),
Modal = function() {
    function f() {
        $("body").one("keydown", 
        function(n) {
            n.keyCode == 27 && i()
        });
        t.on("click", 
        function(n) {
            n.preventDefault(),
            i()
        });
        n.on("click", 
        function(n) {
            n.preventDefault(),
            r() && processingText != "" && $(".lightbox-text").html(processingText)
        });
        $(".modalrmv").one("click", 
        function() {
            u()
        });
        $("#modal-body").keydown(function(n) {
            n.keyCode == 27 && i()
        })
    }
    function e(u, e, o, s, h, c) {
        c ? $("#modal-fieldset").addClass("wide") : $("#modal-fieldset").removeClass("wide"),
        $("#modal-body").html(u).find("input, textarea, select").placeholder(),
        $(".modal").show(),
        n = $("#modal-save"),
        t = $("#modal-cancel"),
        n.text(e),
        t.text(o),
        r = s,
        i = h,
        $("#modal-body").find(".first").focus(),
        f()
    }
    function u() {
        $("body").off("keydown"),
        t.off("click"),
        n.off("click"),
        $(".modalrmv").off("click"),
        $("#modal-body").off(),
        $("div.modal").hide(),
        $("#modal-body").text(""),
        $("#logo").focus()
    }
    var n = null,
    t = null,
    r = null,
    i = null;
    return {
        init: e,
        finalize: u
    }
}
